System verilog 为什么这句话会引入记忆?
我正在学习SystemVerilog,今天我的讲师警告我们不要意外地将内存引入组合系统。他使用以下代码作为示例:System verilog 为什么这句话会引入记忆?,system-verilog,System Verilog,我正在学习SystemVerilog,今天我的讲师警告我们不要意外地将内存引入组合系统。他使用以下代码作为示例: module gate(output logic y, input logic a); always_comb if(a) y = '1; endmodule 然而,我不明白为什么这会带来问题。据我所知,这只是一个简单的缓冲区。此代码以何种方式将内存引入系统?在模拟开始时,如果a==0则y的值将为'0。如果以后a==1'b
module gate(output logic y, input logic a);
always_comb
if(a)
y = '1;
endmodule
然而,我不明白为什么这会带来问题。据我所知,这只是一个简单的缓冲区。此代码以何种方式将内存引入系统?在模拟开始时,如果
a==0
则y
的值将为'0
。如果以后a==1'b1
,则y
将变为'1
。当以后a==0
时,您希望y
具有什么值
这个问题的答案是它将保留以前的值:
'1
。这不是组合逻辑的行为,根据定义,组合逻辑的输出只取决于输入的当前状态,而不取决于它们以前的状态。为了实现您描述的行为,合成器需要一个具有状态、存储器和内存的组件。它将通过使用闩锁来实现这一点。在模拟开始时,如果a==0
则y
的值将为'0
。如果以后a==1'b1
,则y
将变为'1
。当以后a==0
时,您希望y
具有什么值
这个问题的答案是它将保留以前的值:
'1
。这不是组合逻辑的行为,根据定义,组合逻辑的输出只取决于输入的当前状态,而不取决于它们以前的状态。为了实现您描述的行为,合成器需要一个具有状态、存储器和内存的组件。它将通过使用闩锁来实现这一点。那么,是否可以通过添加else y='0在if语句之后编码>不要期望在添加else
分支后合成缓冲区。是否需要缓冲取决于电气和时序约束,而不是布尔行为。我怀疑您的始终块将被优化为零。那么,是否可以通过添加else y='0在if语句之后编码>不要期望在添加else
分支后合成缓冲区。是否需要缓冲取决于电气和时序约束,而不是布尔行为。我怀疑您的始终块将被优化为零。