您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制VHDL设计之逻辑综合的原则以及可综合的代码设计风格 正文
VHDL设计之逻辑综合的原则以及可综合的代码设计风格

VHDL设计之逻辑综合的原则以及可综合的代码设计风格

点击数:7486 次   录入时间:03-04 11:47:46   整理:http://www.55dianzi.com   电脑-单片机-自动控制
      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语句实现向量赋值
            else if(g) outvec=4'b0110; //共9个分支,其中向量的低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:多路器的设计实例。


使用assign赋值语句、case语句或if-else语句可以生成多路器电路。如果条件语句(case或if-else)中分支条件是互斥的话,综合器能自动地生成并行的多路器。
多路器设计方案一。

modul emux1(out,a,b,sel);                //模块声明
    output out;
    input a,b,sel;                        //端口声明
                                              //使用assign语句检查输入信号sel的值
    assign out = sel ? a : b;            //当sel为1时,out为a;否则为b
endmodule

 

多路器设计方案二。

module  mux2( out,a,b,sel);          //模块声明
      output out;
      input a,b,sel;                    //端口声明
      reg out;
      always @(a or b or sel) begin //用电平触发的always块来设计多路器的组合逻辑
            case( sel )                //使用case语句检查输入信号sel的值
                1'b1: out = a;        //如果为1,输出out为a
                1'b0: out = b;        //如果为0,输出out为b
                default: out = 'bx;  //默认状态
            endcase
      end
endmodule

 

多路器设计方案三。

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语句检查输入信号sel的值
                out = a;                      //如果为1,输出out为a
          else
                out = b;                      //如果为0,输出out为b
      end
endmodule

 

例4.13:奇偶校验位生成器设计实例。

module parity( even_numbits,odd_numbits,input_bus);  //模块声明
      output even_numbits, odd_numbits;
      input [7:0] input_bus;                  //端口声明
      assign odd_numbits = ^input_bus; //当input_bus中1的个数为奇数时,输出为1
      assign even_numbits = ~odd_numbits;  //此时输出even_numbits为0
endmodule

 

例4.14:三态输出驱动器设计实例(用连续赋值语句建立三态门模型)。
三态输出驱动器设计方案一。

module trist1( out,in,enable);            //模块声明
      output out;
      input in, enable;                    //端口声明
      assign  out = enable? in: 'bz;      //使用assign语句判断enable的值
endmodule

 

三态输出驱动器设计方案二。

module trist2( out,in,enable );    //模块声明
      output out;
      input in,enable;                //端口声明
      bufif1 mybuf1(out, in, enable); //bufif1是一个 Verilog门级原语(primitive)

上一页  [1] [2] [3] [4] [5]  下一页


本文关键字:风格  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制