在Verilog中,原语是一种用于建立数字电路的基本构建块。它们是预定义的逻辑功能,可以直接用于电路设计中,而无需进一步的描述或定义。
以下是几个常用的Verilog原语及其用法:
-
AND原语
AND原语实现了逻辑与运算。它通常采用以下方式使用:
and(out, in1, in2);
其中,out是输出信号,in1和in2是输入信号。这将创建一个逻辑与门,将in1和in2作为输入,并将结果存储在out中。
-
OR原语
OR原语实现了逻辑或运算。它通常采用以下方式使用:
or(out, in1, in2);
其中,out是输出信号,in1和in2是输入信号。这将创建一个逻辑或门,将in1和in2作为输入,并将结果存储在out中。
-
NOT原语
NOT原语实现了逻辑非运算。它通常采用以下方式使用:
not(out, in);
其中,out是输出信号,in是输入信号。这将创建一个逻辑非门,并将in的补码存储在out中。
-
XOR原语
XOR原语实现了异或操作。它通常采用以下方式使用:
xor(out, in1, in2);
其中,out是输出信号,in1和in2是输入信号。这将创建一个异或门,将in1和in2作为输入,并将结果存储在out中。
除了以上列举的原语之外,Verilog还有很多其他的原语,如MUX、ADD、SUB等等,这些原语都是Verilog中常用的基本构建块,可以帮助设计者更快速、更方便地构建数字电路。
-
UDP(user-defined primitive)
Verilog中的UDP(User-Defined Primitive)是一种自定义的数字逻辑原语,允许用户根据自己的需求创建新的模块。它可以用于实现特定的硬件功能或添加复杂的逻辑操作。
在使用UDP之前,您需要定义UDP的输入和输出端口。UDP支持以下类型的端口:
-
输出端口:output
-
输入端口:input
-
双向端口:inout
下面是定义UDP的基本语法:
primitive udp_name (output output1, input input1, input input2, ...);
// UDP code
endprimitive
UDP分为时序UDP和组合UDP两种(sequential UDP、combinational UDP),UDP可以直接通过真值表(table)的方式建模数字电路,下面是使用table构建2选1 mux的示例:
primitive mux2to1 (out, in0, in1, sel);
output out;
input in0, in1, sel;
table
// sel in1 in0 | out
0 0 0 : 0
0 0 1 : 0
0 1 0 : 1
0 1 1 : 1
1 0 0 : 0
1 0 1 : 1
1 1 0 : 0
1 1 1 : 1
endtable
endprimitive
在table中可以使用的符号有:
symbol | interpretation | comments |
0 | 逻辑0 | |
1 | 逻辑1 | |
x | unknow | 不允许用于时序UDP的下一状态描述 |
? | 0 or 1 or x | 不允许用于output端 |
b | 0 or 1 | 不允许用于output和时序逻辑的下一状态描述 |
- | no change | 只允许用于output端和时序UDP |
(vw) | change value v -> w | v和w是0 1 x z中的一个,只允许用于input端 |
* | 与(??)相同 | 表示input端任意值的改变 |
r | 与(01)相同 | 表述input的上升沿 |
f | (10) | 表示input的下降沿 |
p | (01) or (0x) or (x1) | 广义的input上升沿 |
n | (10) or (1x) or (x0) | 广义的input下降沿 |
另外,在时序UDP中可以使用initial语法初始化output的值,示例如下:
primitive redge_dff(q, clk, data);
output q;
reg q;
input clk, data;
table
// clk data q q+
//obtain output on rising edge of clock
(01) 0 : ? : 0;
(10) 1 : ? : 1;
(0?) 1 : 1 : 1;
(0?) 0 : 0 : 0;
//ignore negative edge of clock
(?0) ? : ? : -;
//ignore data changes on stady clock
? (??) : ? : -;
endtable
endprimitive
不过,原语在实际使用中非常少见,所以本文只是对基本语法的一个介绍与归纳