您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 语言学 > 硬件描算语言chapter4
第4章VerilogHDL行为级描述8/13/20201MicroelectronicsSchoolXidianUniversity3.1连续赋值语句(assign)行为级描述是HDL语言特有的一种对于电路的描述方式,通过对于电路行为的计算机程序语言设计,综合工具可以生成相应的由基本单元构成的数字电路。行为级描述更像是固定模板的代码对应某个特性电路的形式,设计者通过改变模板的参数和内容从而实现电路的行为级描述,对于综合工具而言,生成的电路准确性也较高。(1)VerilogHDL行为级建模设计1bitsD触发器moduleflipflop_d(data,clk,q);inputdata;inputclk;outputq;regq;always@(posedgeclk)q=data;endmodule(2)VerilogHDL行为级建模设计8bitsD触发器moduleflipflop_d(data,clk,q);input[7:0]data;inputclk;output[7:0]q;regq;always@(posedgeclk)q=data;endmoduleQQSETCLRDDQQdataclkqQQSETCLRD[7:0]D[7:0]dataclkqQ[7:0][7:0]Q[7:0]8/13/20203MicroelectronicsSchoolXidianUniversity例4-2:带同步清零置位的模为10的加法计数器modulecounter_10(clk,clear,load,d,q7);inputclk,clear,load;input[3:0]d;output[3:0]q7;reg[3:0]q7;always@(posedgeclk)beginif(!clear)q7=0;elseif(!load)q7=d;elseif(q7==9);q7=0;elseq7=q7+1;endendmoduled[3:0][3:0]loadclearclk[3][0][1][2]un1_q7_1un1_load_1un1_load_2[3:0]un7_q7[3:0][3:0]1+[3:0][3:0]0000[3:0][3:0]edededq7_7[3:0]D[3:0]RQ[3:0][3:0][3:0]q7[3:0]q7[3:0]8/13/20204MicroelectronicsSchoolXidianUniversity模块描述定义行端口类型说明数据类型说明描述体结束行过程块1过程块2连续赋值语句…过程语句(initial/always)语句块过程赋值语句高级程序语句8/13/20205MicroelectronicsSchoolXidianUniversity类别语句可综合性过程语句initialalways√语句块串行语句块begin-end并行语句块fork-join赋值语句连续赋值语句assign√过程赋值语句=、=√条件语句if-else√case,casez,casex√循环语句foreverrepeatwhilefor√编译向导语句`define√include√`ifdef,`else,`endif√4.1过程语句8/13/20206MicroelectronicsSchoolXidianUniversity4.1.1initial过程语句initialbegin语句1;语句2;…语句n;end例4.1-1:VerilogHDL用initial语句给D触发器赋初值moduled_ff(in,clk,q);inputin;inputclk;outputq;regq;initialq=0;always@(posedgeclk)q=in;endmodule例4.1-2:VerilogHDL行为级描述异步清0、异步置1的D触发器moduleDFF1(d,clk,set,rst,q);inputd,clk,set,rst;outputq;regq;always@(posedgeclkornegedgesetornegedgerst)beginif(!rst)q=0;//异步清0,低电平有效elseif(!set)q=1;//异步置1,低电平有效elseq=d;endendmodule4.1.2always过程语句和敏感事件表8/13/20207MicroelectronicsSchoolXidianUniversityalways@(敏感事件列表)语句块;敏感信号可以分为两种类型:一种是电平敏感型,一种是边沿敏感型(1)@(a)(2)@(posedgea)(3)@(negedgea)at/ms①②@(a)@(posedgea)@(negedgea)8/13/20208MicroelectronicsSchoolXidianUniversity例4.1-3:利用敏感事件列表来对组合逻辑建模modulesel_adder_and_multiplier(y,a,b,sel);inputa,b,sel;outputy;wire[3:0]a,b;reg[7:0]y;always@(aorborsel)beginif(sel==0)y=a+b;elsey=a*b;endendmodulesely=a+by=a*bsel_adder_and_multipliery8/13/20209MicroelectronicsSchoolXidianUniversity例4.1-4:3线-8线译码器。moduledecoder(din,dout);input[2:0]din;input[7:0]dout;reg[7:0]dout;always@(din)begincase(din)3’b000:dout=8’b00000001;3’b001:dout=8’b00000010;3’b010:dout=8’b00000100;3’b011:dout=8’b00001000;3’b100:dout=8’b00010000;3’b101:dout=8’b00100000;3’b110:dout=8’b01000000;3’b111:dout=8’b10000000;default:dout=8’b00000000;endcaseendendmodule4.1.3过程语句使用中信号类型的定义8/13/202010MicroelectronicsSchoolXidianUniversity在信号的定义形式方面,无论是对时序逻辑电路还是对组合逻辑电路进行描述,VerilogHDL要求在过程语句(initial和always)中,被赋值信号必须定义为“reg”类型。例4.1-7:VerilogHDL用always描述两输入异或门。modulexor2(a,b,out);inputa,b;outputout;wirea,b;regout;always@(aorb)out=a^b;endmodule4.1.4awlays过程语句中敏感事件的形式8/13/202011MicroelectronicsSchoolXidianUniversity(1)采用过程语句对组合电路进行描述时,需要把全部的输入信号列入敏感信号列表,且敏感信号列表不允许存在边沿信号。例4.1-8:VerilogHDL用always语句描述4选1数据选择器modulemux4_1(out,in0,in1,in2,in3,sel);inputin0,in1,in2,in3;outputout;input[1:0]sel;regout;//被赋值信号定义为“reg”类型always@(in0orin1orin2orin3orsel)//敏感信号列表case(sel)2’b00:out=in0;2’b01:out=in1;2’b10:out=in2;2’b11:out=in3;default:out=2’bxx;endcaseendmodule8/13/202012MicroelectronicsSchoolXidianUniversity例4-2:带同步清零置位的模为10的加法计数器modulecounter_10(clk,clear,load,d,q7);inputclk,clear,load;input[3:0]d;output[3:0]q7;reg[3:0]q7;always@(posedgeclk)beginif(!clear)q7=0;elseif(!load)q7=d;elseif(q7==9);q7=0;elseq7=q7+1;endendmodule(2)采用过程语句对时序电路进行描述时,需要把时间信号和部分输入信号列入敏感信号列表。异步清零和同步置位的模为10的加法计数器modulecounter_10(clk,clear,load,d,q7);inputclk,clear,load;input[3:0]d;output[3:0]q7;reg[3:0]q7;always@(posedgeclkornegedgeclear)beginif(!clear)q7=0;elseif(!load)q7=d;elseif(q7==9);q7=0;elseq7=q7+1;endendmodule4.2语句块8/13/202013MicroelectronicsSchoolXidianUniversity4.2.1串行语句块begin:块名块内声明语句;语句1;语句2;...语句n;end4.2.2并行语句块fork:块名块内声明语句;语句1;语句2;…语句n;join4.3过程赋值语句8/13/202014MicroelectronicsSchoolXidianUniversity4.3.1阻塞赋值语句变量=表达式;阻塞赋值语句的特点:(1)在串行语句块中,各条阻塞赋值语句将按照排列顺序依次执行;在并行语句块中的各条阻塞赋值语句则同时执行,没有先后之分。(2)执行阻塞赋值语句的顺序是,先计算等号右端表达式的值,然后立刻将计算的值赋给左边的变量,与仿真时间无关。4.3.2非阻塞赋值语句变量=表达式;非阻塞赋值语句的特点:(1)在串行语句块中,各条非阻塞语句的执行没有先后之分,排在前面的语句不会影响到后面语句的执行,各条语句并行执行。(2)执行非阻塞赋值语句的顺序是,先计算右端表达式的值,然后等待延迟时间的结束,再将计算的值赋给左边的变量。8/13/202015MicroelectronicsSchoolXidianUniversity例4.3-1:阻塞赋值语句例程序(1)moduleDFF_C1(clk,q,in_1);inputclk,in_1;outputq;regq;regtemp;always@(posedgeclk)begintemp=in_1;q=temp;endendmodule程序(2)moduleDFF_C2(clk,q,in_1);inputclk,in_1;outputq;regq;always@(posedgeclk)q=in_1;endmoduleQQSETCLRDin_1clkqD08/13/202016MicroelectronicsSchoolXidianUniversity例4.3-2:非阻塞赋值语句例程moduleDFF_C3(clk,q,in_1);inputclk,in_1;outputq;regq;regtemp;always@(posedgeclk)begintemp=in_1;q=temp;endendmoduleqQQSETCLRDQQSETCLRDin_1clktempD1D28/13/2020例4.3-3:阻塞赋值语句和非阻塞赋值语句对比例程(1)阻塞赋值语句moduleblock(a,b,c,clk,sel,out);inputa,b,c,clk,sel;outputout;regout,temp;always@(posedgeclk)begintemp=a&b;if(sel)out=temp
本文标题:硬件描算语言chapter4
链接地址:https://www.777doc.com/doc-6769974 .html