生成语句:verilog
我需要在生成语句中声明一个寄存器来存储一些临时值,
以便在实例化中使用。
我的
generate
for(i=0; i< N; i=i+1)
begin: i_loop
Inst_file u(S1(i),P1(i),S(i),P(i));
/* S1 and P1 have N bits and
S = S1 ^ P1;
P = S1 & P1
*/
end //i_loop
S1 和 P1 是简单的组合逻辑,我将它们用作第一次
迭代的电线。但在 i 的每次迭代之后,我需要将输出 S 和 P 指定为输入
(即用 S 和 P 替换 S1 和 P1)。
我知道我应该用寄存器而不是电线来完成(我对吗?)
在这种情况下,我需要 S1 和 P1 作为寄存器。我尝试在
生成中使用always语句。它给出了错误。
你能建议一个出路吗..
I need to declare a register inside a generate statement to store some temporary values,
to be used in instantiations.
i have
generate
for(i=0; i< N; i=i+1)
begin: i_loop
Inst_file u(S1(i),P1(i),S(i),P(i));
/* S1 and P1 have N bits and
S = S1 ^ P1;
P = S1 & P1
*/
end //i_loop
S1 and P1 are simple combinationl logic and i have used them as wires for the first
iteration. But after each iteration of i, I need to assign the outputs S and P as inputs
(i.e replace S1 and P1 with S and P).
I understand I should do it with a register and not a wire (Am i right?)
In such a case i need S1 and P1 as reg. I tried using always statement inside the
generate. It gives error.
Can u please suggest a way out..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该使用 N+1 位宽的总线,并将所有初始化拉到生成块之外。
我相信这样的事情会做:
Sarray[0] 和 Parray[0] 应该初始化以在第一次迭代中使用; Sarray[N] 和 Parray[N] 将是模块链的最终输出值。
You should use an N+1 bit wide bus, and pull all initialization outside of the generate block.
I believe something like this will do:
Sarray[0] and Parray[0] should be initialized for use in the first iteration; Sarray[N] and Parray[N] will be the final output value of the chain of modules.