久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

verilog源程序加測(cè)試程序加仿真波形_幀同步器

作者:雙子無(wú)敵   來(lái)源:雙子無(wú)敵的空間   點(diǎn)擊數(shù):  更新時(shí)間:2014年06月08日   【字體:
先放實(shí)驗(yàn)要求:













實(shí)驗(yàn)源程序:
module FrameSyn(stateout,dataouten,datawrong,reset,system_clk,mode);
  output reg [3:0] stateout;
  output dataouten,datawrong;
  input [1:0] mode;
  input reset,system_clk;
  wire [1:0] state;
  wire clk,datain,dataout;
  always @(state)
  begin
    case (state)
      2'b00 : stateout = 4'b0001;
      2'b01 : stateout = 4'b0010;
      2'b10 : stateout = 4'b0100;
      2'b11 : stateout = 4'b1000;
    endcase
  end
  FrameSynM FrameSM0(.state(state), .dataout(dataout), .dataouten(dataouten), .reset(reset), .clk(clk), .datain(datain));
  FrameDataCheck FrameDataCheck0(.Reset(reset), .Clock(clk), .DataOut(dataout), .DataOutEn(dataouten), .DataWrong(datawrong));
  FrameTrans FrameTrans0(.Reset(~reset), .Clock100M(system_clk), .Mode(mode), .Clock(clk), .DataIn(datain));
 
endmodule


module FrameSynM(state,dataout,dataouten,reset,clk,datain);
  output reg [1:0] state;
  output reg dataouten;
  output dataout;
  input datain,clk,reset;
  reg [7:0] data_count;
  reg [7:0] frame;
  reg [1:0] matchtimes,mismatchtimes;
 
  assign dataout = datain;
 
  always @(negedge reset or posedge clk)
  begin
    if (!reset)
      begin
        state <= 2'b00;
        frame <= 8'b0000_0000;
        data_count <= 8'b0000_0000;
        matchtimes <= 2'b00;
        mismatchtimes <= 2'b00;
        dataouten <= 0;
      end
    else
      begin
        frame <= {frame[6:0], datain};
        if (state == 2'b00)
          begin

            if (frame == 8'b1001_1011)
              begin
                data_count <=0;
                matchtimes <= matchtimes + 1;
                mismatchtimes <= 2'b00;
              end
            else
              begin
                data_count <= data_count + 1;
                mismatchtimes <= mismatchtimes + 1;
                matchtimes <= 2'b00;
              end
          end
        else
          begin
            data_count <= data_count + 1;
if(data_count==8'b1111_0111)
begin
if(state==2'b10||state==2'b11)
dataouten=1'b0;
end
            if(data_count==8'b1111_1111)
              begin

if(state==2'b10||state==2'b11)
dataouten=1'b1;

                if(frame == 8'b1001_1011)
                  begin
                    matchtimes <= matchtimes + 1;
                    mismatchtimes <= 2'b00;
                  end
                else
                  begin
                    mismatchtimes <= mismatchtimes + 1;
                    matchtimes <= 2'b00;
                  end
              end
          end

        case (state)
          2'b00:
            begin
              if (matchtimes == 1)
                begin
                  state <= 2'b01;
                  dataouten <= 1'b0;
                  matchtimes <= 2'b00;
                  mismatchtimes <= 2'b00;
                end
            end
          2'b01:
            begin
              if (matchtimes == 2)
                begin
                  state <= 2'b10;
                  dataouten <= 1'b1;
                  matchtimes <= 2'b00;
                  mismatchtimes <= 2'b00;
                end
              else if (mismatchtimes == 1)
                begin
                  state <= 2'b00;
                  dataouten <= 1'b0;
                  matchtimes <= 2'b00;
                  mismatchtimes <= 2'b00;
                end
              end
          2'b10:
            begin
              if (mismatchtimes == 1)
                begin
                  state <= 2'b11;
//dataouten <= 1'b1;
                  matchtimes <= 2'b00;
                  mismatchtimes <= 2'b00;
                end
            end
          2'b11:
            begin
              if (matchtimes == 1)
                begin
                  state <= 2'b10;
                  //dataouten <= 1'b1;
                  matchtimes <= 2'b00;
                  mismatchtimes <= 2'b00;
                end
              else if (mismatchtimes == 3)
                begin
                  state <= 2'b00;
                  dataouten <= 1'b0;
                  matchtimes <= 2'b00;
                  mismatchtimes <= 2'b00;
                end
            end
        endcase
      end
  end
endmodule

另產(chǎn)生和檢驗(yàn)程序老師給出,未放……




測(cè)試程序:
`timescale 1ps/1ps
module FrameSynTest;
  reg system_clk,reset;
  reg [1:0] mode;
 
  FrameSyn FrameSyn1(.reset(reset), .system_clk(system_clk), .mode(mode));
 
  initial
  begin
    system_clk=0;
    forever
    #1 system_clk=~system_clk;
  end
 
  initial
  begin
    reset = 0;
    mode = 0;
    #0.5 reset = 1;
    #100000 mode = 2;
    #100000 mode = 3;
    #100000 mode = 2;
  end
 
endmodule


仿真波形:


后記:寫(xiě)了好長(zhǎng)時(shí)間……不知道干了點(diǎn)啥。。小時(shí)候嚴(yán)謹(jǐn)認(rèn)真的習(xí)慣真是太重要了。。。以后培養(yǎng)孩子一定不要這么大大咧咧的,白白浪費(fèi)掉那么許多好的光陰。。學(xué)弟學(xué)妹們,如果不幸找到了這篇文章,一定要僅供參考啊……自己寫(xiě)的才是自己的!!!
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 中文字幕一区二区三区视频 | 日本亚洲精品 | 亚洲a视频| 黄色成人在线 | 亚洲国产成人91精品 | 欧美天天干 | 一区二区免费看 | 国产精品久久免费 | 日本大尺度吃奶做爰久久久绯色 | 欧美激情区 | 黄色三级免费 | 黄色激情视频网站 | www.亚洲一区 | 午夜视频网 | 午夜在线观看视频 | 免费a在线 | 日本在线中文 | 欧美一级黄色大片 | 日日操日日操 | 欧美久久精品 | 国产精品久久免费 | 欧美一级黄色片 | 五月天一区二区三区 | 日韩精品久久久 | 久久视频免费在线观看 | 在线观看福利影院 | 国产成人网 | 黄色影音 | 国产精品一区一区三区 | 在线观看日韩精品 | 欧美日韩精品 | 国产精品一级二级 | 羞羞在线 | 国产va在线观看 | 国产精品亚洲综合 | 在线看黄的网站 | 四虎四虎 | 亚洲黄色在线 | 国产精品久久久久久久久久 | 日韩在线视频一区二区三区 | 欧洲性视频 |