您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > ch2-可综合的Verilog设计
P1第2节可综合的Verilog设计P2Question:1.组合逻辑和时序逻辑分别是什么?2.Verilog语言中的值逻辑指的是什么?3.initial语句可综合吗?4.#5可综合吗?5.多个always语句的调度关系?6.什么是寄存器,什么是latch?如何避免产生latch?P3可综合的Verilog设计一.值逻辑,基本数据类型以及操作二.赋值和块语句三.建模方式四.基本组合逻辑的建模五.基本时序逻辑的建模六.复杂逻辑及状态机的建模P4值逻辑四值逻辑1高电平,逻辑10低电平,逻辑0X不确定的逻辑状态Z高阻态P5数据类型Wire器件之间的物理连接。由驱动元件的值决定。线网的缺省值为z。assign语句进行赋值wire[0:3]abus;assignabus=4’b0000;Register抽象的储存单元。always语句和initial语句中被赋值,并且赋值保持不变缺省值为x。reg[0:3]bbus;P6数据类型——WireWireabslselbselansloutwiresela;assignsela=a&ns1;P181阻塞赋值=用于组合逻辑的建模E.g.1①b=a+1;②c=b+1;2.2阻塞赋值和非阻塞赋值P202非阻塞赋值=建模时序电路与语句先后次序没有关系e.g.①b=a+1;②c=b+1;2.2阻塞赋值和非阻塞赋值P23阻塞赋值和非阻塞赋值使用总结带时钟的always模块使用非阻塞赋值不带时钟的always模块使用阻塞赋值连续赋值采用阻塞赋值同一个always中不能混用P24E.g.1always@(posedgeclk)beginif(!rst_n)begina=1’b0;b=1’b0;endelsebegina=c;b=a;endend2.2阻塞赋值和非阻塞赋值P25E.g.2always@(posedgeclk)beginif(!rst_n)begina=1’b0;b=1’b0;endelsebegina=c;b=a;endend2.2阻塞赋值和非阻塞赋值P343建模方式—连续赋值特点数据流建模用于组合逻辑建模assign线网类型,不能为寄存器赋值assignLHS_target=RHS_expression一旦右边表达式的信号发生变化,则重新计算e.g.wire[3:0]z,preset,clear;//线网说明assignz=preset&clear;//连续赋值语句P37三建模方式—行为建模特点注重结构和功能,算法描述综合工具支持语句initialalwaystaskfunctionP39always@(敏感信号表)beginend重复执行敏感信号表完整所有的always并行执行,与编写顺序无关一个变量只能在一个always中赋值变量是reg型alwaysP40Eg1always@(aorb)beginif(ab)c=1’b0;elsec=1’b1;endP44eg5moduledff(clk,rst_n,d,q);inputclk,rst_n,d;outputq;regq;always@(posedgeclk)beginif(!rst_n)q=1’b0;elseq=d;endendmoduleWaveform?P45eg6moduledff_load(clk,rst_n,load,data,q);inputclk,rst_n,load,data;outputq;regq;always@(posedgeclk)beginif(!rst_n)q=1’b0;elseif(load)q=data;endendmoduleP46e.g7计数器always@(posdegeclkornegedgerst_n)beginif(!rst_n)counter=4’b0;elseif(counter==4’d10)counter=4’b0;elsecounter=counter+1’b1;endWaveform?P47e.g.8......wirec;always@(aorb)beginif(a==b)c=1’b0;elsec=1’b1;endalways@(doreorf)beginif(d=e)c=1’b1;elsec=1’b0;end……Howmanyerrorsandwhy?P55思考Initial和always哪一个可以循环执行?如何保证敏感信号表完整?设计一个异步复位,同步置位的寄存器Latch和寄存器的区别?P56三建模方式—层次化建模层次化设计实例化信号的引用P57e.g.1`timescale1ns/100psmodulesub_dff(clk,rst_n,d,q);inputclk;inputrst_n;inputd;outputq;P58regq;always@(posedgeclkornegedgerst_n)beginif(!rst_n)q=1’b0;elseq=d;endendmoduleP59modulealu;...wireclk,rst_n,my_d,my_q;sub_dffUUT_sub_dff(.clk(clk),.rst_n(rst_n),.d(my_d),.q(my_q));...UUT_sub_dff.qendmoduleP60可综合的Verilog设计一.值逻辑,基本数据类型以及操作二.赋值和块语句三.建模方式四.基本组合逻辑的建模五.基本时序逻辑的建模六.复杂逻辑及状态机的建模P614基本组合逻辑的建模建模方法基本块建模P62思考?数字电路的组成1:基本逻辑:与&&,或,非2:线(wire)3:寄存器(reg)P63assign数据流建模实现对线变量的赋值建模简单组合逻辑使用阻塞赋值assignb=a&c;P64always行为级建模实现对寄存器变量的赋值建模时序逻辑和复杂组合逻辑建模组合逻辑使用阻塞赋值建模时序逻辑使用非阻塞赋值敏感信号表触发P65e.g.1:comlogicrega;always@(borcord)beginif(b)a=c;elsea=d;andwirea;assigna=b?c:d;reg型的区别P66e.g2:seqlogicrega;always@(posedgeclk)beginif(rst)a=1’b0;elseif(b)a=c;elsea=d;end综合后电路以及波形?P67基本组合逻辑的建模加法器减法器编码器译码器总线和总线操作P68加法器的建模设计二进制加法的原理1+1=10,0+1=1,1+0=1,0+0=0数字电路的表示sum=a|b;ca=a&b;P69一位半加器regsum,ca;always@(aorb)beginsum=a^b;ca=a&b;endwiresum,ca;assignsum=a^b;assignca=a&b;regsum,ca;always@(aorb)begin{ca,sum}=a+b;endP70一位全加器regsum,ca;always@(aorborcin)beginsum=a^b^cin;ca=a&b|a&cin|b&cin;endwiresum,ca;assignsum=a^b^cin;assignca=a&b|a&cin|b&cin;regsum,ca;always@(aorborcin)begin{ca,sum}=a+b+cin;endmoduelone_full_add(a,b,cin,ca,sum);P7132位加法器方法一:由一位全加器级联而成...wire[0:31]opa,opb,sum;wireca31,ca30,ca29,...,ca1,ca0;one_full_add(.a(opa[31]),b(opb[31]),cin(1’b0),.ca(ca31),.sum(sum[31]));one_full_add(.a(opa[30]),b(opb[30]),cin(ca31),.ca(ca30),.sum(sum[30]));...one_full_add(.a(opa[0]),b(opb[0]),cin(ca1),.ca(ca0),.sum(sum[0]));P72P73方法二:快速算法C[i]=(a[i]&b[i])|(a[i]&c[i-1])|(b[i]&c[i-1])G[i]=a[i]&b[i]P[i]=a[i]|b[i]e.g1c[1]=g[0]+p[0]cin;c[2]=g[1]+p[1]c[1]=g[1]+p[1]g[0]+p[1]p[0]cin=G(1,0)+p(1,0)cin能够分析发觉潜在的并行性P74四位超前进位链P75逻辑综合结果P76P77方法三:由综合器自动完成wire[0:31]a,b,sum;wireca;assign{ca,sum}=a+b;P78减法a–b=a+(~b)+1P79编码器完成对多个信号的编码处理器的中断信号源处理一般使用case或者if语句完成P80always@(time_intoruart_intordma_intor...)beginif(time_int)vector=3’b001;elseif(uart_int)vector=3’b010;elseif(dma_int)vevtor=3’b011;…elsevector=3’b000;end使用Case和if的区别?P81译码器完成对信号的译码,分解信号的意义处理器的译码器P821.moduledecode3_8(data_in,EN,data_out);2.input[2:0]data_in;3.inputEN;4.output[7:0]data_out;5.reg[7:0]data_out;6.always@(data_inorEN)7.begin8.data_out={8{1'b0}};9.if(EN==1)10.begin11.case(data_in[2:0])12.3'b000:data_out[7:0]=8'b00000001;13.3'b001:data_out[7:0]=8'b00000010;14.3'b010:data_out[7:0]=8'b00000100;15.3'b011:data_out[7:0]=8'b0000100016.3'b100:data_out[7:0]=8'b00010000;17.3'b101:data_out[7:0]=8'b00100000;18.3'b110:data_out[7:0]=8'b01000000;19.3'b111:data_out[7:0]=8'b10000000;20.default:data_out[7:0]={8{1'b0}};21.endcase22.end23.end24.endmoduleP831.modulebin27seg(data_in,EN,data_out);2.input[3:0]data_in;3.inputEN;4.output[6:0]data_out;5.always@(data_in)6.begin7.data_out=7'b1111111;8.if(EN==1)9.case(data_in)10.4‘b0000:data_out=7'b1000000;//011.4‘b0001:data_out=7'b1111001;//112.4'b0010:data_out=7'b0100100;//213.4'b0011:data_out=7'b0110000;//314.4'b0100:data_out=7'b0011001;//415.4'b0101:data_out=7'b0010010;//516.4‘b0110:data_out=7'b0000011;//617.4'b0111:data_out=7'b1111000;//718.4'
本文标题:ch2-可综合的Verilog设计
链接地址:https://www.777doc.com/doc-3913837 .html