Verilog HDL数字设计与综合 笔记(1)

来源:互联网 发布:上瘾网络剧全集在哪看 编辑:程序博客网 时间:2024/04/30 09:12

1.wire类型的线网是需要驱动源,register类型是不需要的

2.

3.不能将input ,inout类型的端口声明为reg数据类型,因为reg类型的变量是用来保存数值的,而输入端口只反映与其相连的外部信号的变化,并不保存信号的值

4.FPGA的门级

 

我们可以调用(实例引用)这些逻辑门来构造逻辑电路





5.


6.数据流建模

数据流建模意味着根据数据在寄存器之间的流动和处理过程对电路进行描述,而不是直接对电路的逻辑门进行实例引用。

连续赋值语句是verilog数据流建模的基本语句  即assign 语句  以下是assign 语句的特点


隐式连续赋值


普通赋值延时

assign #10 out=in1 & int2;//连续赋值语句中的延时


上面这段的意思是,当in1,int2发生变化时,out也会跟着变化,但是是先延时后计算,即out的值等于int1,int2变化后#10 后的值见图


隐式连续赋值延时


    线网声明延时



  6.4操作符

    

    


按位操作符


    缩减操作符


6.5 带超前进位的4位全加器

module fulladd4(sum,c_out,a,b,c_in);
output [3:0] sum;
output c_out;
input [3:0] a,b;
input c_in;

//内部连线
wire p0,g0,p1,g1,p2,g2,p3,g3,p4,g4;
wire c4,c3,c2,c1;
//计算每一级的P
assign p0=a[0]^b[0],
  p1=a[1]^b[1],
  p2=a[2]^b[2],
  p3=a[3]^b[3];
//计算每一级的g
assign g0=a[0]&b[0],
  g1=a[1]&b[1],
  g2=a[2]&b[2],
  g3=a[3]&b[3];
//计算每一级的进位
//注意计算超前进位的算数方程中c_in等于C0;

assign c1=g0|(p0&c_in),
  c2=g1|(p1&g0)|(p1&p0&c_in),
       c3=g2|(p2&g1)|(p2&p1&g0)|(p2&p1&p0&c_in),
  c4=g3|(p3&g2)|(p3&p2&p1&g0)|(p3&p2&p1&p0&c_in);
  
//计算加法的总和
assign sum[0]=p0^c_in,
       sum[1]=p1^c1,
  sum[2]=p2^c2,
  sum[3]=p3^c3;
//进位输出赋值
assign c_out=c4;
endmodule 


条件操作符的功能类似于硬件电路中的多路选择器或软件编程语言中的if -then -else 语句


0 0