从Verilog模块保存返回值

时间:2015-10-01 05:46:29

标签: assembly module verilog point

我不明白如何从verilog模块中保存结果。

我声明如下:andgate myand(x,y,andout);

module andgate(a,b, out);
    input a,b;
    output out;
    wire out;
    assign out = a & b;
endmodule 

但是这会返回一个指针,无论何时使用指针,它都会评估。

所以:assign n = andgate只是将n作为andgate指针的副本。我想保存模块的结果,以便重用该值。

由于

1 个答案:

答案 0 :(得分:4)

您已使用assemblyverilog标记了问题,对指针的讨论表明了对Verilog的误解。

虽然大多数编程语言调用verilog可以执行的函数和任务,但Verilogs的主要目的是硬件描述。

模块不是被调用的函数,它是硬件物理单元的表示。

例如:

andgate myand1(x,y,andout);

上图表示单个和门。

andgate myand1(x,y,andout);
andgate myand2(x,y,andout2);

上面的示例使用两个时钟周期或两次调用同一硬件。 确实意味着两个硬件单元。

输出andoutandout2是组合电线

假设n被声明为wire:

assign n = andgate;

这只是将n加入andgate线,它们将始终具有相同的值。没有副本,它们实际上是相同的导线,具有完全相同的值。

您可能希望使用触发器来保持和更改值,触发器仅在时钟边沿上更改其值。

一个基本的触发器看起来像:

reg n; 
always @(posedge clk) begin
  n <= andgate;
end