Verilog入门(四) 本人所撰写的文章都是由个人经验所集成,如有错误观点请指正,如不喜请勿喷 (1)流水线设计 若一个系统模块过多,这时就很难保证来自某一个模块的信号进入其他模块,时间上的同步。 解决: 流水线:多设计寄存器,一级一级递进;这样以资源换速度,保证时序稳定; 如 :module u1( .a(a) ); Reg A_buf; always@(posedge clk) Begin A_buf<=a; End Module u2( .a(A_buf) ); Module u3( .a(A_buf) ); Module u4( .a(A_buf) ); ..... (2)时序收敛 ISE自带静态时序分析器,自学静态时序分析器的使用 理解建立时间与保持时间,抖动与偏移 一般情况下,工作在100Mhz以上的工作时钟时,需要考虑时序收敛的问题,如何去约束路径,约束时序 在100Mhz以下,只要代码风格够好,时序收敛一般没问题。 100Mhz以下,改进代码以实现时序收敛 典型问题,状态机的跳转 如: Reg[5:0] state; Reg[31:0] cnt; ..... case(state) 1:.... ..... 10:begin If(cnt==1000) begin State<=11; Cnt<=0; //代码下载到板子,在这里,可能问题就来了,假如state先跳转了,cnt //会变为0吗?所以需要改进代码,来确保state跳转,同时让cnt变为 //0 End else begin Cnt==cnt+1; end end 11:begin End ..... Endcase 提速建议:(1)少使用嵌套语句,以达到建立时间少 (2) 多用case语句代替if语句 (case语句比较符合FPGA基本的查表原理) (3) 异或与移位算是运算中最快的两种方式了 (3)模块结构设计: ![]() |
|
来自: 小小锐DarkRose > 《verilog》