北大数字集成电路ppt课件--22-Verilog的编写风格

上传人:494895****12427 文档编号:240678220 上传时间:2024-04-29 格式:PPT 页数:33 大小:398.65KB
返回 下载 相关 举报
北大数字集成电路ppt课件--22-Verilog的编写风格_第1页
第1页 / 共33页
北大数字集成电路ppt课件--22-Verilog的编写风格_第2页
第2页 / 共33页
北大数字集成电路ppt课件--22-Verilog的编写风格_第3页
第3页 / 共33页
点击查看更多>>
资源描述
第第2222章章 Coding Styles for Synthesis1.if语句和语句和case语句的编码风格语句的编码风格2.if语句和语句和case语句中晚到达信号的处理语句中晚到达信号的处理3.逻辑块的编码风格逻辑块的编码风格4.高性能编码技术高性能编码技术5.其它问题其它问题主要内容:主要内容:第22章 Coding Styles for Synthesif 语句语句module single_if(a,b,c,d,sel,z);input a,b,c,d;input 3:0 sel;output z;reg z;always(a or b or c or d or sel)begin if(sel3)z=d;else if(sel2)z=c;else if(sel1)z=b;else if(sel0)z=a;else z=0;endendmodulemodule mult_if(a,b,c,d,sel,z);input a,b,c,d;input 3:0 sel;output z;reg z;always(a or b or c or d or sel)begin z=0;if(sel0)z=a;if(sel1)z=b;if(sel2)z=c;if(sel3)z=d;endendmodule例例1.1a 单个单个 if 语句语句例例1.1b 多重多重 if 语句语句注意代码注意代码的优先级的优先级if 语句module single_if(a,b,c,if语句语句if语句case语句语句module case1(a,b,c,d,sel,z);input a,b,c,d;input 3:0 sel;output z;reg z;always(a or b or c or d or sel)begin casex(sel)4b1xxx:z=d;4bx1xx:z=c;4bxx1x:z=b;4bxxx1:z=a;default:z=1b0;endcase endendmodulecasex具有使用具有使用无关项的优点,无关项的优点,不用列出不用列出sel的的所有组合。所有组合。例例1.2 case 语句语句case语句module case1(a,b,c,d,晚到达信号处理晚到达信号处理 设计时通常知道哪一个设计时通常知道哪一个 信号到达的时间要晚一些。这些信信号到达的时间要晚一些。这些信息可用于构造息可用于构造HDL,使,使到达晚的信号离输出近一些到达晚的信号离输出近一些。下面的例子中,针对晚到达信号重新构造下面的例子中,针对晚到达信号重新构造if和和case语句,以语句,以提高逻辑性能。提高逻辑性能。晚到达信号处理 设计时通常知道哪一个 信号到达晚到达的是数据信号晚到达的是数据信号 顺序顺序if语句可以根据关键信号构造语句可以根据关键信号构造HDL。在例。在例1.1a 中,输入信号中,输入信号d处于选处于选择链的最后一级,也就是说择链的最后一级,也就是说d最靠近输出。最靠近输出。假如信号假如信号b_is_late是晚到达信号,我们就要重新构造例是晚到达信号,我们就要重新构造例1.1a使其最优化。使其最优化。module mult_if_improved(a,b_is_late,c,d,sel,z);input a,b_is_late,c,d;input 3:0 sel;output z;reg z,z1;always(a or b_is_late or c or d or sel)begin z1=0;if(sel0)z1=a;if(sel2)z1=c;if(sel3)z1=d;if(sel1&(sel2|sel3)z=b_is_late;else z=z1;endendmodule具有优先级的具有优先级的if结构结构module single_if(a,b,c,d,sel,z);input a,b,c,d;input 3:0 sel;output z;reg z;always(a or b or c or d or sel)begin if(sel1)z=b_is_late;else if(sel2)z=c;else if(sel3)z=d;else if(sel0)z=a;else z=0;endendmodule无优先级的无优先级的if结构结构晚到达的是数据信号 顺序if语句可以根据关键信晚到达的是数据信号晚到达的是数据信号晚到达的是数据信号晚到达的是控制信号晚到达的是控制信号 如果晚到达信号作为如果晚到达信号作为if语句条件分支的条件,也应使这个信号离输出最近。语句条件分支的条件,也应使这个信号离输出最近。在下面的例子中,在下面的例子中,CTRL_is _late是晚到达的控制信号是晚到达的控制信号module single_if_late(A,C,CTRL_is_late,Z);input 6:1 A;input 5:1 C;input CTRL_is_late;output Z;reg Z;always(C or A or CTRL_is_late)if(C1=1b1)Z=A1;else if(C2=1b0)Z=A2;else if(C3=1b1)Z=A3;else if(C4=1b1&CTRL_is_late=1b0)/late arriving signal in if condition Z=A4;else if(C5=1b0)Z=A5;else Z=A6;endmodule晚到达的是控制信号 如果晚到达信号作为if语句条件分支晚到达的是控制信号晚到达的是控制信号module single_if_late(A,C,CTRL_is_late,Z);input 6:1 A;input 5:1 C;input CTRL_is_late;output Z;reg Z;always(C or A or CTRL_is_late)/late arriving signal in if condition if(C4=1b1&CTRL_is_late=1b0)Z=A4;else if(C1=1b1)Z=A1;else if(C2=1b0)Z=A2;else if(C3=1b1)Z=A3;else if(C5=1b0)Z=A5;else Z=A6;endmodule晚到达的是控制信号module single_if_lateif-case嵌套语句嵌套语句module case_in_if_01(A,DATA_is_late_arriving,C,sel,Z);input 8:1 A;input DATA_is_late_arriving;input 2:0 sel;input 5:1 C;output Z;reg Z;always (sel or C or A or DATA_is_late_arriving)if(C1)Z=A5;else if(C2=1b0)Z=A4;else if(C3)Z=A1;else if(C4)case(sel)3b010:Z=A8;3b011:Z=DATA_is_late_arriving;3b101:Z=A7;3b110:Z=A6;default:Z=A2;endcase else if(C5=1b0)Z=A2;else Z=A3;endmoduleif-case 嵌套语句module case_in_if_0if-case嵌套语句嵌套语句Case语句语句if语句语句if-case 嵌套语句Case语句if语句if-case嵌套语句嵌套语句修改后修改后always(sel or C or A or DATA_is_late_arriving)begin if(C1)Z1=A5;else if(C2=1b0)Z1=A4;else if(C3)Z1=A1;else if(C4)case(sel)3b010:Z1=A8;/3b011:Z1=DATA_is_late_arriving;3b101:Z1=A7;3b110:Z1=A6;default:Z1=A2;endcase else if(C5=1b0)Z1=A2;else Z1=A3;FIRST_IF=(C1=1b1)|(C2=1b0)|(C3=1b1);if(!FIRST_IF&C4&(sel=3b011)Z=DATA_is_late_arriving;else Z=Z1;endif-case 嵌套语句修改后always(sel orif-case嵌套语句嵌套语句修改后修改后if-case 嵌套语句修改后逻辑构造块的编码格式逻辑构造块的编码格式 下面介绍某些常用逻辑块,如译码器的不同的编下面介绍某些常用逻辑块,如译码器的不同的编码格式。每种块给出了一个通常格式和建议格式。码格式。每种块给出了一个通常格式和建议格式。所有的例子的位宽都是参数化的。所有的例子的位宽都是参数化的。逻辑构造块的编码格式 下面介绍某些常用逻辑块,3-8译码器译码器index方式方式module decoder_index(in1,out1);parameter N=8;parameter log2N=3;input log2N-1:0 in1;output N-1:0 out1;reg N-1:0 out1;always(in1)begin out1=0;out1in1=1b1;endendmoduleloop方式方式module decoder38_loop(in1,out1);parameter N=8;parameter log2N=3;input log2N-1:0 in1;output N-1:0 out1;reg N-1:0 out1;integer i;always(in1)begin for(i=0;iN;i=i+1)out1i=(in1=i);endendmodule3-8译码器index方式module decoder_in译码器译码器译码器优先级编码器优先级编码器高位优先高位优先1?_?:11101?_?:110001?_?:1010001_?:1000000_1?:0110000_01?:0100000_001?:0010000_000?:000module priority_low_high(A,P);parameter N=8;parameter log2N=3;input N-1:0 A;/Input Vector output log2N-1:0 P;/High Priority Index reg log2N-1:0 P;function log2N-1:0 priority;input N-1:0 A;integer I;begin priority=3b0;for(I=0;IN;I=I+1)if(AI)priority=I;/Override previous index end endfunction always(A)P=0;I=I-1)XOR_reduce_func=XOR_reduce_func dataI;end endfunction always(data_in)data_out=0;K=K-1)begin J=(NUM+1)/2;J=J-1;if(even(NUM)for(I=NUM-1;I=0;I=I-2)begin resultJ=tempI tempI-1;J=J-1;end else begin for(I=NUM-1;I=1;I=I-2)begin resultJ=tempI tempI-1;J=J-1;end result0=temp0;end tempN-1:0=resultN-1:0;NUM=(NUM+1)/2;end XOR_tree_func=result0;endendfunction always(data_in)data_out=XOR_tree_func(data_in);endendmodule树形结构树形结构归约XORmodule XOR_tree(data_in,高性能编码技术高性能编码技术在某些情况下,可以通过重复逻辑来提高速度。在某些情况下,可以通过重复逻辑来提高速度。在下面的例子中,在下面的例子中,CONTROL是一个晚到达的输入信号。要提高性能,是一个晚到达的输入信号。要提高性能,就要减少就要减少CONTROL到输出之间的逻辑。到输出之间的逻辑。module BEFORE(ADDRESS,PTR1,PTR2,B,CONTROL,COUNT);input 7:0 PTR1,PTR2;input 15:0 ADDRESS,B;input CONTROL;/CONTROL is late arriving output 15:0 COUNT;parameter 7:0 BASE=8b10000000;wire 7:0 PTR,OFFSET;wire 15:0 ADDR;assign PTR=(CONTROL=1b1)?PTR1:PTR2;assign OFFSET=BASE-PTR;assign ADDR=ADDRESS-8h00,OFFSET;assign COUNT=ADDR+B;endmodule高性能编码技术在某些情况下,可以通过重复逻辑来提高速度。mo高性能编码技术高性能编码技术高性能编码技术高性能编码技术高性能编码技术module PRECOMPUTED(ADDRESS,PTR1,PTR2,B,CONTROL,COUNT);input 7:0 PTR1,PTR2;input 15:0 ADDRESS,B;input CONTROL;output 15:0 COUNT;parameter 7:0 BASE=8b10000000;wire 7:0 OFFSET1,OFFSET2;wire 15:0 ADDR1,ADDR2,COUNT1,COUNT2;assign OFFSET1=BASE-PTR1;/Could be f(BASE,PTR)assign OFFSET2=BASE-PTR2;/Could be f(BASE,PTR)assign ADDR1=ADDRESS-8h00,OFFSET1;assign ADDR2=ADDRESS-8h00,OFFSET2;assign COUNT1=ADDR1+B;assign COUNT2=ADDR2+B;assign COUNT=(CONTROL=1b1)?COUNT1:COUNT2;endmodule高性能编码技术module PRECOMPUTED(ADD高性能编码技术高性能编码技术 在下面的例子中,在下面的例子中,if语句的条件表达中包含有操作符。语句的条件表达中包含有操作符。module cond_oper(A,B,C,D,Z);parameter N=8;input N-1:0 A,B,C,D;/A is late arriving output N-1:0 Z;reg N-1:0 Z;always(A or B or C or D)begin if(A+B 24)Z=C;else Z=D;endendmodule高性能编码技术 在下面的例子中,if语句的条件高性能编码技术高性能编码技术若条件表达式中的信号若条件表达式中的信号A是晚到达信号。是晚到达信号。因此要移动信号因此要移动信号A使其离输出近一些。使其离输出近一些。高性能编码技术若条件表达式中的信号A是晚到达信号。因此要移动高性能编码技术高性能编码技术module cond_oper_improved(A,B,C,D,Z);parameter N=8;input N-1:0 A,B,C,D;/A is late arriving output N-1:0 Z;reg N-1:0 Z;always(A or B or C or D)begin if(A 24-B)Z=C;else Z=D;endendmodule高性能编码技术module cond_oper_improv其它要注意的问题其它要注意的问题 不要引入不必要的不要引入不必要的latch 敏感表要完整敏感表要完整 非结构化的非结构化的for循环循环 资源共享资源共享其它要注意的问题 不要引入不必要的latch不要产生不需要的不要产生不需要的latch 条件分支不完全的条件语句(条件分支不完全的条件语句(if和和case语句)将会产生锁存器语句)将会产生锁存器always(cond_1)begin if(cond_1)data_out=data_in;endalways(sel or a or b or c or d)begin case(sel)2b00:a=b;2b01:a=c;2b10:a=d;end不要产生不需要的latch 条件分支不完全的条件语句(if敏感表要完整敏感表要完整不完整的的敏感表将引起综合后网表的仿真结果与以前的不一致。不完整的的敏感表将引起综合后网表的仿真结果与以前的不一致。always(d or clr)if(clr)q=1b0 else if(e)q=d;always(d or clr or e)if(clr)q=1b0 else if(e)q=d;敏感表要完整不完整的的敏感表将引起综合后网表的仿真结果与以前非结构化的非结构化的for循环循环综合工具处理循环的方法是将循环内的结构重复。在循环中包含不变综合工具处理循环的方法是将循环内的结构重复。在循环中包含不变化的表达式会使综合工具花很多时间优化这些冗余逻辑。化的表达式会使综合工具花很多时间优化这些冗余逻辑。for(I=0;i4;i=i+1)begin sig1=sig2;-unchanging statement data_out(I)=data_in(I);endsig1=sig2;-unchanging statementfor(I=0;i4;i=i+1)data_out(I)=data_in(I);非结构化的for循环综合工具处理循环的方法是将循环内的结构重资源共享资源共享只有在同一个条件语句只有在同一个条件语句(if和和case)不同的分支中的算术操作才会共享。不同的分支中的算术操作才会共享。条件操作符条件操作符?:中的算术操作不共享。中的算术操作不共享。if(cond)z=a+b;else z=c+d;Z=(cond)?(a+b):(c+d);资源共享只有在同一个条件语句(if和case)不同的分支中的括号的作用括号的作用利用括号分割逻辑。利用括号分割逻辑。z=a+b+c+d;Z=(a+b)+(c+d);+ab+c+zd+ab+cd+z括号的作用利用括号分割逻辑。z=a+b+c+
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!