生成语句:verilog

发布于 2024-11-02 08:08:25 字数 511 浏览 0 评论 0原文

我需要在生成语句中声明一个寄存器来存储一些临时值,

以便在实例化中使用。

我的

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

扬花落满肩 2024-11-09 08:08:25

您应该使用 N+1 位宽的总线,并将所有初始化拉到生成块之外。
我相信这样的事情会做:

wire [N:0]Sarray;
wire [N:0]Parray;

// initialize Sarray[0] and Parray[0] here using continuous assignment

generate
for(i=0; i< N; i=i+1)
begin: i_loop

    Inst_file u(Sarray[i],Parray[i],Sarray[i+1],Parray[i+1]);

end //i_loop

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:

wire [N:0]Sarray;
wire [N:0]Parray;

// initialize Sarray[0] and Parray[0] here using continuous assignment

generate
for(i=0; i< N; i=i+1)
begin: i_loop

    Inst_file u(Sarray[i],Parray[i],Sarray[i+1],Parray[i+1]);

end //i_loop

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文