Verilog原语使用疑问:两种写法是否有差异?是否需always块?
Verilog门原语写法差异与使用说明
咱们先直接点明:你给出的两种写法有本质差异,而且第二种是语法错误的写法,下面详细拆解:
两种写法的具体分析
第一种写法:
and(O1, input1, input2);
这是Verilog门级原语的标准、正确的实例化方式,属于连续门级建模。一旦你写了这句,这个与门原语就会一直处于“工作状态”——它会自动监控input1和input2的电平变化,只要其中任何一个输入发生改变,就会立刻按照与逻辑计算并更新输出O1,完全不需要额外的代码块来触发,这是门原语的原生特性。第二种写法:
always(O1 or input1 or input2) and(O1,input1,input2);
这个写法从语法到逻辑都是错误的:- Verilog的
always块是用于过程建模的(比如实现时序逻辑、用过程赋值的组合逻辑),块内部只能写过程赋值语句(=或<=)、条件判断、循环等代码,绝对不能直接在always块里实例化门原语。 - 敏感列表里加入输出
O1完全多余,甚至可能引发不必要的逻辑触发;另外这种逗号分隔的敏感列表是Verilog-95的旧语法,现在更推荐用@*或@(*)来自动生成组合逻辑的敏感列表。
- Verilog的
关于门原语的使用疑问
Verilog门原语完全不需要包裹在always块中。门原语(and、or、not等)属于连续建模元素,它们的行为和assign连续赋值语句类似:只要完成实例化,就会持续监控所有输入端口的变化,一旦输入发生改变,就会立即计算并更新输出,全程自动执行,不需要任何块来触发。
内容的提问来源于stack exchange,提问作者jatinBatra
相关产品推荐
相关产品推荐

