我不明白如何从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指针的副本。我想保存模块的结果,以便重用该值。
由于
答案 0 :(得分:4)
您已使用assembly
和verilog
标记了问题,对指针的讨论表明了对Verilog的误解。
虽然大多数编程语言调用verilog可以执行的函数和任务,但Verilogs的主要目的是硬件描述。
模块不是被调用的函数,它是硬件物理单元的表示。
例如:
andgate myand1(x,y,andout);
上图表示单个和门。
andgate myand1(x,y,andout);
andgate myand2(x,y,andout2);
上面的示例不使用两个时钟周期或两次调用同一硬件。 确实意味着两个硬件单元。
输出andout
和andout2
是组合电线。
假设n被声明为wire:
assign n = andgate;
这只是将n
加入andgate
线,它们将始终具有相同的值。没有副本,它们实际上是相同的导线,具有完全相同的值。
您可能希望使用触发器来保持和更改值,触发器仅在时钟边沿上更改其值。
一个基本的触发器看起来像:
reg n;
always @(posedge clk) begin
n <= andgate;
end