在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > VHDL設(shè)計(jì)進(jìn)階:邏輯綜合的原則以及可綜合的代碼設(shè)計(jì)

      VHDL設(shè)計(jì)進(jìn)階:邏輯綜合的原則以及可綜合的代碼設(shè)計(jì)

      作者: 時(shí)間:2013-08-27 來源:網(wǎng)絡(luò) 收藏

      編碼器設(shè)計(jì)方案二。

      module encoder2 ( none_on,out2,out1,out0,h,g,f,e,d,c,b,a); //模塊聲明
      input h,g,f,e,d,c,b,a;
      output none_on,out2,out1,out0; //端口聲明
      wire [3:0] outvec; //向量聲明
      assign outvec = //使用assign語句實(shí)現(xiàn)輸出向量賦值
      h ? 4'b0111 : g ? 4'b0110 : f ? 4'b0101:
      e ? 4'b0100 : d ? 4'b0011 : c ? 4'b0010 :
      b ? 4'b0001 : a ? 4'b0000 : 4'b1000;
      assign none_on = outvec[3]; //使用assign語句進(jìn)行編碼
      assign out2 = outvec[2];
      assign out1 = outvec[1];
      assign out0 = outvec[0];
      endmodule

      編碼器設(shè)計(jì)方案三。

      module encoder3 ( none_on,out2,out1,out0,h,g,f,e,d,c,b,a); //模塊聲明
      input h,g,f,e,d,c,b,a;
      output none_on,out2,out1,out0; //端口聲明
      wire [3:0] outvec; //向量聲明
      assign {none_on,out2,out1,out0} = outvec; //與上例的編碼方式一致
      always @( a or b or c or d or e or f or g or h) begin
      if(h) outvec=4'b0111; //使用if_else語句實(shí)現(xiàn)向量賦值
      else if(g) outvec=4'b0110; //共9個(gè)分支,其中向量的低3位有8種編碼方式
      else if(f) outvec=4'b0101;
      else if(e) outvec=4'b0100;
      else if(d) outvec=4'b0011;
      else if(c) outvec=4'b0010;
      else if(b) outvec=4'b0001;
      else if(a) outvec=4'b0000;
      else outvec=4'b1000;
      end
      endmodule

      例4.12:多路器的設(shè)計(jì)實(shí)例。


      使用assign賦值語句、case語句或if-else語句可以生成多路器電路。如果條件語句(case或if-else)中分支條件是互斥的話,綜合器能自動(dòng)地生成并行的多路器。
      多路器設(shè)計(jì)方案一。

      modul emux1(out,a,b,sel); //模塊聲明
      output out;
      input a,b,sel; //端口聲明
      //使用assign語句檢查輸入信號(hào)sel的值
      assign out = sel ? a : b; //當(dāng)sel為1時(shí),out為a;否則為b
      endmodule

      多路器設(shè)計(jì)方案二。

      module mux2( out,a,b,sel); //模塊聲明
      output out;
      input a,b,sel; //端口聲明
      reg out;
      always @(a or b or sel) begin //用電平觸發(fā)的always塊來設(shè)計(jì)多路器的組合
      case( sel ) //使用case語句檢查輸入信號(hào)sel的值
      1'b1: out = a; //如果為1,輸出out為a
      1'b0: out = b; //如果為0,輸出out為b
      default: out = 'bx; //默認(rèn)狀態(tài)
      endcase
      end
      endmodule

      多路器設(shè)計(jì)方案三。

      module mux3( out,a,b sel); //模塊聲明
      output out;
      input a, b, sel; //端口聲明
      reg out;
      always @( a or b or sel ) begin
      if( sel ) //使用if_else語句檢查輸入信號(hào)sel的值
      out = a; //如果為1,輸出out為a
      else
      out = b; //如果為0,輸出out為b
      end
      endmodule

      例4.13:奇偶校驗(yàn)位生成器設(shè)計(jì)實(shí)例。

      module parity( even_numbits,odd_numbits,input_bus); //模塊聲明
      output even_numbits, odd_numbits;
      input [7:0] input_bus; //端口聲明
      assign odd_numbits = ^input_bus; //當(dāng)input_bus中1的個(gè)數(shù)為奇數(shù)時(shí),輸出為1
      assign even_numbits = ~odd_numbits; //此時(shí)輸出even_numbits為0
      endmodule

      例4.14:三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)實(shí)例(用連續(xù)賦值語句建立三態(tài)門模型)。
      三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案一。

      module trist1( out,in,enable); //模塊聲明
      output out;
      input in, enable; //端口聲明
      assign out = enable? in: 'bz; //使用assign語句判斷enable的值
      endmodule

      三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案二。

      module trist2( out,in,enable ); //模塊聲明
      output out;
      input in,enable; //端口聲明
      bufif1 mybuf1(out, in, enable); //bufif1是一個(gè) Verilog門級(jí)原語(primitive)
      //通過實(shí)例化該原語,實(shí)現(xiàn)三態(tài)門的調(diào)用
      endmodule

      例4.15:三態(tài)雙向驅(qū)動(dòng)器設(shè)計(jì)實(shí)例。

      module bidir(tri_inout,out,in,en,b); //模塊聲明
      inout tri_inout;
      output out;
      input in,en,b; //端口聲明
      assign tri_inout = en? in : 'bz; //三態(tài)門的輸入為in
      assign out = tri_inout ^ b; //三態(tài)門的輸出為b
      endmodule


      2.時(shí)序電路設(shè)計(jì)實(shí)例
      例4.16:觸發(fā)器設(shè)計(jì)實(shí)例。

      module dff( q,data,clk); //模塊聲明
      output q;
      input data,clk; //端口聲明
      reg q;
      always @( posedge clk ) begin //邊緣檢測(cè)
      q = data; //通過always語句,實(shí)現(xiàn)觸發(fā)器
      end
      endmodule

      例4.17:電平敏感型鎖存器設(shè)計(jì)實(shí)例一(assign語句)。

      module latch1( q,data,clk); //模塊聲明
      output q;
      input data,clk; //端口聲明
      assign q = clk ? data : q; //通過assign語句,實(shí)現(xiàn)的是一個(gè)鎖存器
      endmodule

      例4.18:帶置位和復(fù)位端的電平敏感型鎖存器設(shè)計(jì)實(shí)例二(assign語句)。

      module latch2( q,data,clk,set,reset); //模塊聲明
      output q;
      input data,clk,set,reset; //端口聲明
      assign q= reset ? 0 : ( set? 1:(clk? data : q ) );
      //通過assign語句,實(shí)現(xiàn)的是一個(gè)鎖存器
      //其中,set為置位端,reset為復(fù)位端
      //在clk為高電平時(shí),鎖存data,否則保持q值
      endmodule

      例4.19:電平敏感型鎖存器設(shè)計(jì)實(shí)例三(always塊)。

      module latch3( q, data, clk); //模塊聲明
      output q;
      input data,clk; //端口聲明
      reg q;
      always @(clk or data) begin //電平檢測(cè)
      if(clk) //clk為高電平時(shí),q鎖存data值
      q = data;
      end
      endmodule

      注意 有的綜合器會(huì)產(chǎn)生一個(gè)警告信息,提示將產(chǎn)生了一個(gè)電平敏感型鎖存器。因?yàn)榇死性O(shè)計(jì)的就是一個(gè)電平敏感型鎖存器,所以這個(gè)警告信息是沒有問題的。

      例4.20:移位寄存器設(shè)計(jì)實(shí)例。

      module shifter( din,clk,clr,dout); //模塊聲明
      input din,clk,clr;
      output [7:0] dout; //端口聲明
      reg [7:0] dout;
      always @(posedge clk) begin
      if(clr) //清零
      dout = 8'b0;
      else begin
      dout = dout1; //左移一位
      dout[0] = din; //把輸入信號(hào)放入寄存器的最低位
      end
      end
      endmodule


      例4.21:8位計(jì)數(shù)器設(shè)計(jì)實(shí)例一。

      module counter1( out, cout, data, load, cin, clk); //模塊聲明
      output [7:0] out;
      output cout;
      input [7:0] data;
      input load, cin, clk; //端口聲明
      reg [7:0] out;
      always @(posedge clk) begin //邊緣檢測(cè)
      if( load ) //加載信號(hào)檢測(cè)
      out = data;
      else
      out = out + cin;
      end
      assign cout= out cin; //只有當(dāng)out[7:0]的所有各位都為1
      //并且進(jìn)位cin也為1時(shí)才能產(chǎn)生進(jìn)位cout
      endmodule

      例4.22:8位計(jì)數(shù)器設(shè)計(jì)實(shí)例二。

      module counter2( out, cout, data, load, cin, clk); //模塊聲明
      output [7:0] out;
      output cout;
      input [7:0] data;
      input load, cin, clk; //端口聲明
      reg [7:0] out;
      reg cout;
      reg [7:0] preout; //寄存器聲明
      always @(posedge clk) begin //邊緣檢測(cè)
      out = preout; //觸發(fā)器
      end
      //計(jì)算計(jì)數(shù)器和進(jìn)位的下一個(gè)狀態(tài),為提高性能,load不應(yīng)影響進(jìn)位
      always @( out or data or load or cin ) begin
      {cout, preout} = out + cin; //進(jìn)位操作
      if(load) preout = data; //判斷加載信號(hào)
      end
      endmodule


      上一頁 1 2 下一頁

      評(píng)論


      相關(guān)推薦

      技術(shù)專區(qū)

      關(guān)閉