欢迎来到天天文库
浏览记录
ID:48049249
大小:32.00 KB
页数:6页
时间:2020-01-21
《Verilog编程经历.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、verilog教程--------关键路径的选取!,我的编程经历!这是一篇我的心得,写verilog的心得,啊,对于学习verilog设计FPGA的同学一定会有帮助的啊! 本人就例子来教大家怎样提取关键路径: 先解释一下什么叫关键路径 所谓关键路径就是,在电路中频繁调用,而且延迟过长, 或者产生意外的几率比较大的线路。 1:组合电路中的关键路径提取: q=a&b&c
2、d&e&b; 这个很简单了,估计大家都会的,因为b的传输要两级, 可以简单的提取b作为一级的: q=(a&c
3、d&e)&b 2:always——block中的关键
4、路径提取: always中关键路径的提取一般用分步法提取,请看下面一个 always——block, always@(in) begin if(!a) if(c&&(!b&&e)) out=out1; elseout=out2; elseif(b&&e)out=out1; end 这里面e是关键路径,我们可以分两个步骤提取关键路径 (1)当e=1的时候有: if(!a) if(c&&(!b)) out=out1; elseout=out2; (2)当e=0的时候有: if(!a)out=out2; 因此这
5、个always可以写成这个样子: always@(in) begin if(e) if(!a) if(c&&(!b)) out=out1; elseout=out2; elseif(!a)out=out2; end 这是中间形式,还要写成最终形式: 定义两个临时变量,为了在综合时候,被综合掉,要定义他们 为输出端口(output)——切记!!! outputout_temp1,out_temp2; out_temp1=a?out:(c&&(!b))?out1:out2; out_temp2=a?out:o
6、ut2; assignout=e?out_temp1:out_temp2; 好了,这个已经提取成功!~ 再来看第三个例子,在应用中经常用到的啊 3。FSM中的关键路径的提取:关于状态机,这是FPGA设计必备的基础,编码方式有很多中比如:one——hot,orone--cool 还有就是组合电路和时序电路的写法,这里主要讲关键路径的提取至于状态机的写法,还是查阅一下资料啊! FSM中关键路径的提取方法一般是先将要提取的关键路径去掉 然后将原来FSM中的next-state用另外一个符号代替,作为次FSM的输入,即有主从两个F
7、SM。 来看一下这个简单的状态机啊: parameters0=0; parameters1=1; parameters2=2; parameters3=3; inputin1,in2,in3,set; reg[1:0]nextstate,currentstate; always@(in1orin2orin3orcurrentstate) begin nextstate=s0;//startstate case(currentstate) s0:if(in1&&!set) nextstate=s1; else
8、if(set)nextstate=s2; s1:if(in2&&set) nextstate=s3; elseif(!set)nextstate=s2; s2:if(set)nexstate=s3; s3:if(in3)nextstate=s0; default:nextstate=s0; endcase end 好,现在来看第一步,将状态机中的关键路径去掉,这里的关键路径为set,试想如果状态从s0一路到s3,都是set在起作用,如果有一个不小心的毛刺产生,就会执行错误的行为,所以这里的set为关键路径。 提取后的状
9、态机如下: reg[1:0]temp; always@(in1orin2orin3orcurrentstate) begin nextstate=s0;//startstate temp=s0; case(currentstate) s0:if(in1) temp=s1; s1:if(in2) temp=s3; s2:temp=temp; s3:if(in3)temp=s0; default:temp=s0; endcase end 第二步: always2(temporcurrentstateo
10、rset) begin case(currentstate) s0:if(!set) nextstate=temp elsen
此文档下载收益归作者所有