微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 流水线用verilog代码怎么编?

流水线用verilog代码怎么编?

时间:10-02 整理:3721RD 点击:
在几个模块加入流水线,用verilog代码怎么编?

流水线操作的前提是该操作从输入到输出无需在一个时钟周期内完成。所以通过将组合逻辑用寄存器分割成多个流水步骤可以降低时序要求。
网上有很多例子

楼上说的有理

网上这种例子很多

我也在写。多交流哟。
zoudingjie@126.com

运算中加入存储

加上寄存器

如果不用流水线:
module top(a,b,c,d,clk)
input a,b,c;
input clk;
output d;
assign d=a+b+c;
endmodule
用流水线:
module top(a,b,c,d,clk)
input a,b,c;
input clk;
output d;
reg step0,step1;
always @ (posedge clk)
begin
    step0<=a+b;
    step1<=step0+c;
end
assign d=step1;
endmodule
大概这样吧

实际上就是要在组合逻辑中插入D触发器。

谢谢,太好了

学习了 谢谢

去找本讲处理器verilog实现的书,有源码的

用寄存器把关键路径一分为二,就是流水线了。

看了lZ的问题和大家的回答,有个感觉,想说出来,说得不对的地方还请大家指正。
流水线,特别是模块之间的流水线,可不是靠verilog这么编出来的。这种流水线,每级流水一般需要好几个时钟周期,涉及到流水线之间的握手机制,因此,是需要提前就设计出来的,而不是后来编出来的。

学习了。

for pipeline design, first you need to divid your design, in different portion, A1, A2, A3,.., B1, B2, B3,C1,C2,C3,..., thus A1 in the first clock cycle, A2, B1 in second, A3,B2,C1 in third and so on.

有个暂存态就可以了

加流水引入latency了,你得考虑这个!

将关键路径打断,中间插入寄存器,就是流水线结构了。

顶一下!

对流水线的具体形式越来越模糊了 理论上知道,但是 具体操作 还是 不清晰 如哪位大侠有既简单 有清晰的代码 wangerdang@gmail.com 谢谢了 不胜感激

如果你的组合逻辑比较复杂的话,自己不知道如何插入寄存器的话,那么这个也可以交给综合器去做,也就是RETIMING,你只需要在你需要PIPELINE的组合逻辑,前后插入几个冗余的寄存器,综合工具会根据你的需要RETIMING,将寄存器放到合适的地方。

流水线的实现不是简单靠写CODE实现的,在设计阶段的时候,就已经设计好了,要用流水线,且画出流水线图,或者写出SPEC,然后才能写CODE,如果仅仅因为时序不满足,在组合逻辑中插入触发器,这样只能减少组合逻辑延迟,也就是说减少setup的违例,但也许会导致功能上的错误。

set_multicycle_path -setup ......
compile_ultra -retime -time
reset_path ......
set_optimize_registers true ......
optimize_registers -only_attributed_designs

简单的说就是多级寄存器串联

加寄存就可以了。

没有什么特别的,就是把一件很复杂的事情分成几步来做,中间结果用寄存器暂存就是了

要是学生加我们的QQ群吧:109935913.大家都是新手

加入D触发器,把路径打断。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top