版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1Verilog设计快速入门设计快速入门 2021/3/272内部信号声明内部信号声明assign语句语句底层模块或门原语底层模块或门原语调用调用(包括生成块包括生成块)Initial或或always语句块语句块任务和函数定义任务和函数定义module 模块名模块名 (端口列表端口列表);端口信号声明端口信号声明;参数声明参数声明;endmodulespecify 块块(路径延迟路径延迟)Verilog模块结构模块结构说明说明:n浅色部分用得较少浅色部分用得较少;n常用语句只有三种常用语句只有三种:nassign语句语句nalways语句语句n底层模块调用语句底层模块调用语句n三种语句顺序无关
2、三种语句顺序无关n除开始的除开始的module模模块名块名和结束的和结束的endmodule必须写必须写外外,其他都是可选的。其他都是可选的。功能描述部分功能描述部分模块说明部分模块说明部分2021/3/273Verilog模块结构模块结构例例1:二选一数据选择器的描述二选一数据选择器的描述二选一数据选择器的结构之一二选一数据选择器的结构之一二选一数据选择器的符号二选一数据选择器的符号设设a、b、s波形波形已知已知,可可得得y波形波形:2021/3/274Verilog模块结构模块结构2选选1多路选择器的多路选择器的Verilog描述描述内部信号内部信号声明声明assign语句语句底层模块或底
3、层模块或门原语调用门原语调用always语句块语句块module 模块名模块名 (端口列表端口列表); 端口信号声明端口信号声明; 参数声明参数声明;endmoduleabsyMUX21a2021/3/275Verilog程序结构程序结构例例2:边沿边沿D触发器的触发器的Verilog描述描述内部信号内部信号声明声明assign语句语句底层模块或底层模块或门原语调用门原语调用always语句块语句块module 模块名模块名 (端口列表端口列表); 端口信号声明端口信号声明; 参数声明参数声明;endmodule2021/3/276Verilog模块结构模块结构1模块说明部分模块说明部分 mo
4、dule 模块名模块名 (端口列表端口列表); 端口信号声明端口信号声明; 参数声明参数声明;l 模块名是指电路的模块名是指电路的名字名字,由由用户指定用户指定,最好与文件名一致(特别是在最好与文件名一致(特别是在Quartus II软件中调试时软件中调试时);l 端口列表是指电路的输入端口列表是指电路的输入/输出信号名称列表输出信号名称列表,信号名由用户指定信号名由用户指定,各名称各名称间用逗号隔开间用逗号隔开;l 端口信号声明是要说明端口信号的输入输出属性、信号的数据类型端口信号声明是要说明端口信号的输入输出属性、信号的数据类型,以及以及信号的位宽信号的位宽;输入输出属性有输入输出属性有i
5、nput,output,inout三种三种,信号的数据类型信号的数据类型常用的有常用的有wire和和reg两种两种;信号的位宽用信号的位宽用n1:n2表示表示;同一类信号之间同一类信号之间用逗号隔开用逗号隔开;l 参数声明要说明参数的名称和初值参数声明要说明参数的名称和初值输入输出属性输入输出属性 数据类型数据类型 位宽位宽 名称名称 parameter 数据类型数据类型 参数名参数名 = 初值初值2021/3/277例例:module full_adder (A,B,CIN,S,COUT); input 3:0 A,B; input CIN; output reg 3:0 S; output
6、 COUT;位宽如果不做说明位宽如果不做说明的话的话,默认默认是是1位位;数据类型不做说明的话数据类型不做说明的话,默认是默认是wire型的。型的。S位宽为位宽为4位位,对应对应信号为信号为S3、S2、S1、S0根据模块说明根据模块说明部分部分,我们我们可以得出电路符号可以得出电路符号ABCINSfull_adderCOUT2021/3/2782. assign语句语句内部信号内部信号声明声明assign语句语句底层模块或底层模块或门原语调用门原语调用always语句块语句块module 模块名模块名 (端口列表端口列表); 端口信号声明端口信号声明;endmoduleassign语句称作连续
7、赋值语句语句称作连续赋值语句assign 赋值目标赋值目标 = 表达式表达式例例:特点特点:l之所以称为连续赋值语句是指其总是处于激活之所以称为连续赋值语句是指其总是处于激活状态状态,只要只要表达式中的操作数有变化表达式中的操作数有变化,立即进行计算和赋值。(与连立即进行计算和赋值。(与连续赋值语句对应的另一种语句称为过程赋值语句)续赋值语句对应的另一种语句称为过程赋值语句)l赋值目标必须是赋值目标必须是wire型的型的,wire表示电路间的连线。表示电路间的连线。ayAbyassign y=a;assign y=a&b;基本格式基本格式:2021/3/2792. assign语句语句
8、例例:assign M=B|C; assign Y=A&M; MM和和Y都必须是都必须是wire型的型的2021/3/27102. assign语句语句Verilog具有丰富的表达式运算具有丰富的表达式运算功能功能,可用可用于于assign语句语句详见夏宇闻教材第详见夏宇闻教材第6章章,自学自学。2021/3/27(1) 算术型算术型*乘法乘法/除法除法+加法加法-减法减法% 求余求余* 求幂求幂例例:Y=5%2;Y=2*3;求求余余,结果结果为为1求求幂幂,结果结果为为8说明说明l 加减乘除、求幂的操作数可以是实数也可以是加减乘除、求幂的操作数可以是实数也可以是整数整数,求求余运算的
9、操作数只能是整数。余运算的操作数只能是整数。l 求余运算结果取第一个操作数的求余运算结果取第一个操作数的符号符号;2021/3/27(2) 逻辑型逻辑型!逻辑非逻辑非& 逻辑与逻辑与|逻辑或逻辑或例例:Y=! (32) Y=(26);Y=(26);Y=(2大于大于= 大于等于大于等于2) Y=(3=2);Y=(3=2);Y=(3右移右移 算术右移算术右移 1;Y= 4sb1001 1; 结果为结果为0100结果为结果为1100说明说明l 移位运算的操作数是移位运算的操作数是1位或多位位或多位二进制数二进制数;l 向左或向右移向左或向右移n位位;l 只有对有符号数的算术右移自动补符号位只
10、有对有符号数的算术右移自动补符号位;l 其他移位均自动补其他移位均自动补0。操作数操作数 移位符移位符 n;格式格式2021/3/27(8) 拼接复制运算符拼接复制运算符拼接拼接 复制拼接复制拼接例例:Y= 4b1001, 2b11;Y= 42b01; Y= 42b01, 2b11; 结果为结果为100111结果为结果为说明说明l将多个操作数拼接将多个操作数拼接起来起来;l将操作数复制将操作数复制n遍并拼接起来遍并拼接起来;l可以组合使用。可以组合使用。操作数操作数1, 操作数操作数2, 格式格式n操作数操作数1, 操作数操作数2, 格式格式2021/3/27(9) 条件运算符条件运算符? :
11、 用于条件赋值用于条件赋值例例:Y= a ? b : c;Y= s1 ? (s0 ? d3 : d2) : (s0? d1 : d0);如果如果a=1,则则y=b;如果如果a=0,则则y=c。如果如果a=x,则则y=x。说明说明l根据表达式根据表达式1的的值值,决定决定运算运算结果结果;l如果表达式如果表达式1值为值为1,则结果等于表达式则结果等于表达式2;l如果表达式如果表达式1值为值为0,则结果等于表达式则结果等于表达式3;l如果表达式如果表达式1值为值为x,则结果为则结果为x;l可以嵌套。可以嵌套。表达式表达式1 ? 表达式表达式2 : 表达式表达式3格式一格式一2021/3/27203
12、. always语句块语句块内部信号内部信号声明声明assign语句语句底层模块或底层模块或门原语调用门原语调用always语句块语句块module 模块名模块名 (端口列表端口列表); 端口信号声明端口信号声明;endmodulealways语句块又称过程块语句块又称过程块基本格式基本格式:always (敏感信号条件表敏感信号条件表) 各类顺序各类顺序语句语句; 特点特点:l always语句本身不是单一的有意义的一条语句本身不是单一的有意义的一条语句语句,而是而是和下面的语句和下面的语句一起构成一个语句块一起构成一个语句块,称之为过程称之为过程块块;过程过程块中的赋值语句称过程赋块中的赋
13、值语句称过程赋值语句值语句;l 该语句块不是总处于激活状态该语句块不是总处于激活状态,当满足激活条件时才能被执行当满足激活条件时才能被执行,否则否则被挂起被挂起,挂起时即使操作数有变化挂起时即使操作数有变化,也不执行赋值也不执行赋值,赋值目标值保持不赋值目标值保持不变变;l 赋值目标必须是赋值目标必须是reg型的。型的。例例: always (posedge CLK) Q=D;2021/3/273. always语句块语句块l激活条件由敏感信号条件表决定激活条件由敏感信号条件表决定,当敏感条件满足时当敏感条件满足时,过过程块被激活。程块被激活。敏感条件有敏感条件有两种两种,一一种是边沿敏感种是
14、边沿敏感,一种是电平敏感。一种是电平敏感。2021/3/27电平敏感电平敏感: :(posedge (posedge 信号名信号名) )边沿敏感边沿敏感: :(negedge (negedge 信号名信号名) )( (信号名列表信号名列表) )信号上升沿到来信号上升沿到来信号下降沿到来信号下降沿到来例例: :(posedge clk)(posedge clk)例例: :(negedge clk)(negedge clk)信号列表中的任一个信号有变化信号列表中的任一个信号有变化例例: :(a,b,c)(a,b,c)当当a,b,ca,b,c中有一个发生变化中有一个发生变化说明说明: : 逗号可以换
15、成逗号可以换成oror例例: :(a or b or c)(a or b or c)3. always语句块语句块2021/3/27例例: :always (posedge CLK)always (posedge CLK) Q=D;Q=D;当当CLKCLK上升沿到来上升沿到来时时, ,激活激活该语句块该语句块, ,将将D D的值赋给的值赋给Q;Q;否则否则, ,该语句块挂起该语句块挂起, ,即使即使D D有变化有变化, ,Q Q的值也保持不变的值也保持不变, ,直到下一次赋值。直到下一次赋值。例例: :always (D)always (D) Q=D;Q=D;当当D D有变化时(不管是由有变化
16、时(不管是由1 1变变0 0还是由还是由0 0变变1 1), ,激活激活该语句块该语句块, ,将将D D的值赋给的值赋给Q;Q;否则否则, ,该语句块挂起该语句块挂起, ,Q Q的值保持不变的值保持不变, ,直到下一次赋值。直到下一次赋值。D DQ QD DCLKCLKQ QD DQ Q3. always语句块语句块2021/3/27说明说明: :l过程块中的赋值目标必须是过程块中的赋值目标必须是regreg型的。型的。l由于由于alwaysalways语句可以描述边沿语句可以描述边沿变化变化, ,在在设计时序电路中得到设计时序电路中得到广泛应用。广泛应用。lalwaysalways语句中还可
17、以使用语句中还可以使用ifif、casecase、forfor循环等语句循环等语句, ,其功其功能更加强大。能更加强大。例例: :always (posedge CLK)always (posedge CLK) Q=D;Q=D;例例: :always (D)always (D) Q=D;Q=D;必须是必须是regreg型的型的3. always语句块语句块2021/3/27253. always语句块语句块assign语句和语句和always语句的主要区别语句的主要区别:连续赋值语句总是处于激活连续赋值语句总是处于激活状态状态,只要只要操作数有变化马上进行计操作数有变化马上进行计算和算和赋值赋
18、值;过程赋值语句只有当激活该过程时过程赋值语句只有当激活该过程时,才会进行计算和赋值才会进行计算和赋值,如果如果该过程不被激活该过程不被激活,即使操作数发生变化也不会计算和赋值。即使操作数发生变化也不会计算和赋值。verilog规定规定assign中的赋值目标必须是中的赋值目标必须是wire型的型的,而而always语句中的赋值目标必须是语句中的赋值目标必须是reg型的。型的。assign Q=Dalways (posedge clk) Q=D;例例:只要只要D发生发生变化变化,马上马上进行计算和进行计算和赋值赋值; Q必必须是须是wire型。型。只有当只有当clk上升沿到来上升沿到来时时,才
19、能才能激活该激活该块语句块语句,才能进行计算和才能进行计算和赋值赋值;否则否则,即即使使D发生变化也不会计算和赋值。在未发生变化也不会计算和赋值。在未被激活时被激活时,Q的值保持不变。的值保持不变。Q必须是必须是reg型。型。2021/3/27263. always语句块语句块lalways语句块中除了可以使用表达式赋值语句块中除了可以使用表达式赋值以外以外,还还可以使用可以使用if,case等行为描述语句等行为描述语句,还能够描述边沿变化还能够描述边沿变化,因此其功能比因此其功能比assign语句更强大(语句更强大(assign语句不能使用语句不能使用if等语句等语句,也不能也不能描述边沿变
20、化)。描述边沿变化)。例例:module DFF2 (CLK,D,Q,RST,EN)input CLK,D,RST,EN;output Q;reg Q;always (posedge CLK or negedge RST)begin if (!RST) Q=0; else if (EN) Q=DendendmoduleDENQDCLKQRST2021/3/27273. always语句块语句块always语句块中如果有多条赋值语句必须将其用语句块中如果有多条赋值语句必须将其用begin end包括包括起来起来,assign语句中没有语句中没有begin end。例例:module adder
21、(a,b,cin,s,cout) input a,b,cin; output s,cout; reg s,cout;always (a,b,cin)begin s=abcin; cout=(a&b)|(a&cin)|(b&cin);endendmodule思考问题思考问题:在仿真在仿真时时,begin和和end之间的语句执行之间的语句执行顺序如何顺序如何?请大家画出该请大家画出该模块的端口符模块的端口符号图和电路图号图和电路图2021/3/273. always语句块语句块begin end之间的赋值语句有阻塞赋值和非阻塞赋值之分。之间的赋值语句有阻塞赋值和非阻塞赋值之
22、分。阻塞赋值阻塞赋值:语句顺序语句顺序执行执行,前面前面的执行完才能执行的执行完才能执行后面后面;赋值符号赋值符号:=非阻塞赋值非阻塞赋值:所有语句并行执行。所有语句并行执行。赋值符号赋值符号:=赋值目标赋值目标1=表达式表达式1;赋值目标赋值目标2=表达式表达式2;赋值目标赋值目标1=表达式表达式1;赋值目标赋值目标2=表达式表达式2;赋值语句赋值语句1会阻塞赋值语句会阻塞赋值语句2 ,即即只有当赋值语句只有当赋值语句1执执行完才能执行赋值语句行完才能执行赋值语句2。赋值语句赋值语句1不会阻塞赋不会阻塞赋值语句值语句2 ,赋值赋值语句语句1和和赋值语句赋值语句2并行执行。并行执行。2021/
23、3/273. always语句块语句块举例比较举例比较:l阻塞赋值阻塞赋值begin m=a*b; y=m;endl非阻塞赋值非阻塞赋值begin m=a*b; y=m;end当当m=a*b 执行完才能执行执行完才能执行y=m 。当当m赋值完成赋值完成后后,才能才能执行执行y的赋值的赋值,y得到的是得到的是m的新值。的新值。m和和y的赋值并行的赋值并行执行执行,y得到的是得到的是m的旧值。的旧值。m=a*b 和和y=m并行执行并行执行 。2021/3/27l阻塞赋值的实质阻塞赋值的实质: :右边表达式的计算和对左边寄存器变量的赋右边表达式的计算和对左边寄存器变量的赋值是一个统一的原子操作中的两
24、个值是一个统一的原子操作中的两个动作动作, ,这这两个动作之间不能两个动作之间不能再插入其他任何动作。再插入其他任何动作。l非阻塞赋值的实质非阻塞赋值的实质: :首先按顺序计算右边表达式的值首先按顺序计算右边表达式的值, ,但是并但是并不马上赋值不马上赋值, ,而是要等到过程结束时再按顺序赋值。而是要等到过程结束时再按顺序赋值。赋值目标赋值目标1=表达式表达式1;赋值目标赋值目标2=表达式表达式2;赋值目标赋值目标1=表达式表达式1;赋值目标赋值目标2=表达式表达式2;2021/3/27l 阻塞阻塞赋值赋值【例例8-6】always (A,B)beginM1=A;M2=B&M1;Q=M
25、1|M2;end设设A、B同时由同时由0变变1激活前激活前:M1=0,M2=0,Q=0激活后激活后:先计算先计算A=1,马上马上赋值给赋值给M1再计算再计算B&M1=1,马上赋值给马上赋值给M2再计算再计算M1|M2=1,马上赋值给马上赋值给Ql 非阻塞非阻塞赋值赋值【例例8-7】always (A,B)beginM1=A;M2=B&M1;Q=M1|M2;end先计算先计算A=1,(等待等待,不赋值)不赋值)再计算再计算B&M1=0,(等待(等待,不赋值)不赋值)再计算再计算M1|M2=0,(等待(等待,不赋值)不赋值)过程结束过程结束先赋值给先赋值给M1=1再赋值给再
26、赋值给M2=0再赋值给再赋值给Q=0举例比较举例比较: :2021/3/273.2多路选择器的多路选择器的Verilog描述描述应用应用:l 设计组合电路时常用阻塞设计组合电路时常用阻塞赋值赋值;l 设计时序电路时常用非阻塞赋值设计时序电路时常用非阻塞赋值;l 但不是绝对的。但不是绝对的。l 不建议在一个不建议在一个always块中混合使用阻塞赋值和非阻塞赋值块中混合使用阻塞赋值和非阻塞赋值例例:阻塞赋值实现的组合电路阻塞赋值实现的组合电路module MY (A,B,C,Y) input A,B,C; output Y; reg Y; reg M;always (A,B,C)begin M=
27、B|C; Y=A&M; endendmoduleM32例例:非阻塞赋值实现的移位寄存器非阻塞赋值实现的移位寄存器module DDF3(CLK,D,Q)output Q;input CLK,D;reg a,b,Q;always (posedge CLK)begina=D;b=a;Q=b;end2021/3/27333. always语句块语句块综合举例综合举例:4位二进制加法计数器位二进制加法计数器module CNT4 (CLK,Q); input CLK; output 3:0 Q; reg 3:0 Q1;always (posedge CLK)begin Q1=Q1+1;enda
28、ssign Q=Q1;endmodule此程序中有此程序中有always和和assign两两条条语句语句,他们他们之间是并行之间是并行的的;此程序中有一个内部变量此程序中有一个内部变量Q1,使使用时要进行声明用时要进行声明;内部信号声明格式内部信号声明格式:数据类型数据类型 位宽位宽 信号名称信号名称 元素个数元素个数2021/3/27344. 底层模块和门原语调用底层模块和门原语调用例例:图示电路的描述图示电路的描述daclkqCLKCLK内部信号内部信号声明声明assign语句语句底层模块或底层模块或门原语调用门原语调用always语句块语句块module 模块名模块名 (端口列表端口列表
29、); 端口信号声明端口信号声明;endmodule该电路是由两个该电路是由两个D触发器和一个或门构成触发器和一个或门构成的的,设计设计思路之一思路之一是先设计底层电路是先设计底层电路D触发器触发器,然后再设计顶层电路然后再设计顶层电路,在顶层电在顶层电路中可调用底层模块。路中可调用底层模块。一、底层模块调用一、底层模块调用2021/3/27354. 底层模块和门原语调用底层模块和门原语调用底层模块描述底层模块描述module DFF(CLK,D,Q) output reg Q; input CLK,D;always (posedge CLK) Q=D;endmoduleQCLKCLKDDFF顶
30、层模块描述顶层模块描述为了调用底层为了调用底层模块模块,需要需要加两个加两个内部变量内部变量d1和和q1;并给两次调用的模块进行命名并给两次调用的模块进行命名;调用时例化名不能省略。调用时例化名不能省略。daclkqCLKCLKq1d1DFFDFFdff1dff2module examp (clk,d,a,q) output q; input clk,d,a; wire d1; wire q1;DFF dff1(.CLK(clk),.D(d1),.Q(q1);DFF dff2(q1,d,q);or (d1,a,q);endmodule底层模块调用格式底层模块调用格式:底层模块名底层模块名 例化
31、名例化名 (端口映射端口映射);2021/3/27364. 底层模块和门原语调用底层模块和门原语调用端口映射有两种方法端口映射有两种方法:端口名关联法(命名法)端口名关联法(命名法)位置关联法(顺序法)位置关联法(顺序法)命名法格式命名法格式:(.底层端口名底层端口名1(外接信号名外接信号名1),.底层端口名底层端口名2(外接信号名外接信号名2),)顺序法格式顺序法格式:(外接信号名外接信号名1,外接信号名外接信号名2,)必须严格按照底层模块的端口信号列表顺序书写必须严格按照底层模块的端口信号列表顺序书写因为有名字因为有名字对应对应,不必不必按底层模块的端口信号列表顺序按底层模块的端口信号列表
32、顺序daclkqCLKCLKq1d1DFFDFFdff1dff2module DFF(CLK,D,Q)QCLKCLKDDFFDFF dff1(.CLK(clk),.D(d1),.Q(q1);DFF dff2(q1,d,q);2021/3/274. 底层模块和门原语调用底层模块和门原语调用二、门二、门原语调原语调用用门原语名门原语名 实例名实例名 (端口连接端口连接)门原语调用格式门原语调用格式:例例:and (out, in1, in2); 其中实例名可省略(和模块调用不同其中实例名可省略(和模块调用不同),端口端口连接只能采连接只能采用顺序法用顺序法,输出在前输出在前,输入在后。输入在后。o
33、utin1in1and (与)or(或)xor(异或)nand(与非)nor(或非)xnor(同或)端口连接中第一个是端口连接中第一个是输出输出,其余其余是输入是输入,输入个数不限。输入个数不限。Verilog语言提供已经设计好的语言提供已经设计好的门门,称为称为门原语(门原语(primitive,共共12个)个),这些门可直接调用这些门可直接调用,不用再对其进行功能描述。不用再对其进行功能描述。与门等与门等6个个2021/3/27384. 底层模块调用底层模块调用端口列表中前面是端口列表中前面是输出输出,最后最后一个是输入一个是输入,输出个数不限。输出个数不限。not (非门)buf(缓冲器
34、)not (OUT1, IN); INOUT1INOUT1OUT2buf b1_2out(OUT1, OUT2, IN);例例:非门和缓冲器非门和缓冲器2021/3/274. 底层模块调用底层模块调用三态门三态门bufif1(控制端控制端1有效缓冲器有效缓冲器)notif1(控制端(控制端1有效非门)有效非门)bufif0 (控制端控制端0有效缓冲器有效缓冲器)notif0(控制端(控制端0有效非门)有效非门)例例:bufif1 b1 (out, in, ctrl);bufif0 b0 (out, in, ctrl);notif1 n1 (out, in, ctrl);notif0 n0 (o
35、ut, in, ctrl);端口列表中前面是端口列表中前面是输出输出,中间中间是输入是输入,最后是使能端最后是使能端,输出个数输出个数不限。不限。outoutoutoutininininctrlctrlctrlctrlbufif1三态门bufif0三态门notif1三态门notif0三态门2021/3/275. Verilog中的数据类型中的数据类型Verilog中的数据类型分为两大类中的数据类型分为两大类线网类(线网类(net类)类)变量类(变量类(variable类)类)因连续赋值语句和过程赋值语句的激活特点因连续赋值语句和过程赋值语句的激活特点不同不同,故故赋值目标特赋值目标特点也不同点
36、也不同,前者不需要保存前者不需要保存,后者需要保存后者需要保存,因此规定两种数据类因此规定两种数据类型型,net型用于连续赋值的赋值目标或型用于连续赋值的赋值目标或门原语的门原语的输出输出,且仿真时不且仿真时不需要分配内存空间需要分配内存空间,variable用于过程赋值的赋值目标用于过程赋值的赋值目标,且仿真且仿真时需要分配内存空间。时需要分配内存空间。2021/3/27lnet类中的数据类型类中的数据类型wire(线型)(线型)tri(三态)(三态)tri0(下拉电阻)(下拉电阻)supply0(地)(地)wand(线与)(线与) triand(三态与)(三态与) tri1(上拉电阻)(上
37、拉电阻)supply1(电源)(电源)wor(线或)(线或)trior(三态或)(三态或)trireg(电容性线网)(电容性线网)reg(寄存器型)(寄存器型)integer(整型)(整型)time(时间型)(时间型)real(实型)(实型)realtime(实时间型)(实时间型)lvariable类中的数据类型类中的数据类型最常用的是最常用的是wire最常用的是最常用的是reg2021/3/27将一个信号定义成将一个信号定义成net型还是型还是varible型型,由由以下两方面决定以下两方面决定a. 使用何种赋值语句对该信号进行赋值使用何种赋值语句对该信号进行赋值,如果是如果是连续赋值或连续
38、赋值或门原语赋值门原语赋值或或例化语句赋值例化语句赋值,则定义成则定义成net型型;如果如果是是过程过程赋值赋值则定义成则定义成variable型型。b. 对于端口信号来说对于端口信号来说,input信号和信号和inout信号必须定义成信号必须定义成net型的型的;output信号可以是信号可以是net型的也可以是型的也可以是variable型的型的,决定于如何对其赋值(同决定于如何对其赋值(同a)。)。netnetvariable 或或 net2021/3/27例例:abcde该图中该图中d和和e的赋值有三种方法的赋值有三种方法(1) 使用连续赋值语句使用连续赋值语句assign d=a&a
39、mp;b;assign e=d|c;此时此时,d和和e必须定必须定义为义为net型的。型的。(2) 使用门原语赋值使用门原语赋值and (d,a,b);or (e,d,c);此时此时,d和和e也必须也必须定义为定义为net型的。型的。(3) 使用过程赋值语句使用过程赋值语句always (a,b,d,c)begin d=a&b; e=d|c;end此时此时,d和和e必须定义为必须定义为variable型的。型的。2021/3/27四个端口信号中四个端口信号中A、B必须是必须是net型型的的;SO、CO可以是可以是net型的也可以是型的也可以是variable型型的的,决定决定于如何对其
40、赋值于如何对其赋值例例:A AB BSOSOCOCOinsth_adder2021/3/27例例:l c决定于如何对其赋值决定于如何对其赋值;l d如果是端口信号如果是端口信号,则必须是则必须是net型的型的;如果来自其它驱动如果来自其它驱动源则决定于如何对其赋值。源则决定于如何对其赋值。l e、f、g、h必必须是须是net型型的的;abcdA AB BSOSOCOCOinstA AB BSOSOCOCOinstefghh_adderh_adderh_adder U1(a,b,c,d);h_adder U2(c,d,e,f);2021/3/2746例例: 2b00 5d8 无符号数的表示方法无
41、符号数的表示方法:有符号数的表示方法有符号数的表示方法:例例: 8sb10111011 8b10111011 注意有符号数是按照补码表示注意有符号数是按照补码表示的的,即即第一位是符号位。第一位是符号位。6. Verilog中数字的表示格式中数字的表示格式比较比较:(00)2(01000)2(-69)10(187)102021/3/27477. 逻辑值逻辑值1:逻辑逻辑1,高高电平电平,数字数字10:逻辑逻辑0,低电平低电平,数字数字0 x:不确定不确定z:高阻态高阻态Verilog语言中的逻辑值有四种语言中的逻辑值有四种2021/3/27488. if语句语句4种类型的种类型的if语句语句i
42、f () 语句语句 ;if () 真语句真语句 ; else 假语句假语句 ;if () 语句语句1 ;else if ()语句语句2 ;else if ()语句语句3 ;计算条件表达式计算条件表达式,如果结果为真如果结果为真(1或非或非0值值),则则执行真语句执行真语句,如果条件为假如果条件为假(0或或x),则执行假语句。则执行假语句。if ()语句语句1 ;else if ()语句语句2 ;else if ()语句语句3 ;else 默认语句默认语句 ;l显然、种可比显然、种可比、种描述更复杂、种描述更复杂的条件关系。的条件关系。可以是一条可以是一条语句语句,也也可以是一组语句可以是一组语
43、句2021/3/27498. if语句语句例例:计数器计数器always (posedge CLK) if (!RST) Q=0; else Q=Q+1; +A3.0B3.0ADDERDQPREENACLRSELDATAADATABOUT0MUX21Add04 h1 -Q3.0reg0CLKRSTQ3.0Q3.04 h0 -2021/3/278. if语句语句1.加加elsealways (a,b)if (sel) Q=a;else Q=b;always (a,b)Q=a;if (sel) Q=b;使条件完整的两种方法使条件完整的两种方法:01QselQab01QabselQ2.设初值设初值l
44、在用在用if语句设语句设计计“组组合电合电路路”时时要要注意注意,如果如果条件不完整条件不完整,会综合出寄存器。会综合出寄存器。2021/3/27518. if语句语句计算表达式计算表达式可以是任意形式的可以是任意形式的表达式表达式;条件表达式的结果只有条件表达式的结果只有0和和1两种两种,如果如果计算表达式的值为计算表达式的值为0,则则条件表达式的值为条件表达式的值为0,否则为否则为1。例如例如:设设a=1000, b=0110条件表达式条件表达式计算表达式计算表达式结果结果if (a=b)00if (ab)11if (a)10001if (a*b)11_0000(前两位被截掉前两位被截掉)
45、0if (a|b)11101if (a&b)00000 (计算表达式计算表达式)条件表达式格式条件表达式格式:2021/3/27529. case语句语句case (表达式表达式)取值取值1: 语句语句1;取值取值2: 语句语句2;取值取值3: 语句语句3;.default: 默认语句默认语句;endcasecase (表达式表达式)取值取值1: 语句语句1;取值取值2:语句语句2;取值取值3:语句语句3;.endcase如果表达式的值如果表达式的值=取值取值1,则则执行语句执行语句1;如果表达式的值如果表达式的值=取值取值2,则执行语句则执行语句2;如果表达式的值如果表达式的值=取值
46、取值3,则执行语句则执行语句3;如果表达式的值和上述取值都不相等如果表达式的值和上述取值都不相等,则执行默认语句。则执行默认语句。default语句可以不带。语句可以不带。功能功能:格式格式2021/3/27539 case语句语句例例: module MUX41 (a,b,c,d,s1,s0,y);input a,b,c,d,s1,s0;output reg y;/reg y;always (a,b,c,d,s1,s0)begincase (s1,s0) 2b00 : y=a; 2b01 : y=b; 2b10 : y=c; 2b11 : y=d; default : y=0;endcase
47、endendmoduleSEL1.0DATA3.0OUTMUXyabcds0s1Mux0如果条件描述不如果条件描述不完整完整,则则会综合会综合出出寄存器寄存器;在在设计组合电路时要设计组合电路时要注意使条件描述完整。注意使条件描述完整。加加default语句可以使条件完语句可以使条件完整。如果条件描述完整也可以整。如果条件描述完整也可以不加不加default语句。语句。2021/3/275410. Verilog语言的描述风格语言的描述风格n结构化描述(也称门级描述)(全部用门原语和底层模结构化描述(也称门级描述)(全部用门原语和底层模块调用)块调用) n数据流级描述(全部用数据流级描述(全部用assign语句)语句)n行为级描述(全部用行为级描述(全部用always语句配合语句配合if、case语句等)语句等)三种描述方式三种描述方式nRTL级描述(数据流级级描述(数据流级+行为级行为级,可可综合)综合)有些资料中提到另外一种描述方式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年财务类笔试题库(含答案)
- 2026年小儿原发性血小板增多症模拟试题及答案详解
- 2026年安全生产知识竞赛题题库(含答案)
- 低压电工新版模拟试题及答案详解
- 2026年团课模拟试题选择题及答案详解
- 2026年农业晋级考试题库(含答案)
- 2026年京东在线测评题库(含答案)
- 中级消防设施操作员理论考试专项题库消防设施操作(含答案)
- 高级经济师人力资源2026年模拟试题及答案详解
- 中医科医师晋升副主任(主任)医师例分析专题报告中医龙胆泻肝汤辩证治愈
- 《“诺曼底号”遇难记》课件
- 人教PEP四年级英语上册阅读理解专项30篇(含答案)
- 2026年秋季开学中秋诗词赏析课件
- 2026临汾市侯马市招聘乡(街道)消防协管员考试备考试题及答案详解
- 2026秋学期人教版小学数学六年级上册(新教材)教学计划附进度表
- 2026年秋季学期小学四年级上册英语(人教版PEP新教材)教学计划
- 自来水生产工岗前专项能力考核试卷含答案
- 2026教科版六年级科学上册第一单元《健康生活》全部教案
- 2026年山东青岛市中考历史试题(附答案)
- 江西省人才发展集团有限公司2026年春季集中招聘专题【11人】建设笔试备考题库及答案解析
- 2026年重庆市九龙坡区辅警人员招聘考试试卷及答案
评论
0/150
提交评论