原语
是构成设计的最基本单元,通过真值表描述其功能,包括基本逻辑门在内有26个预定义功能模型
n输入逻辑门
原语 | 描述 | 使用 |
---|---|---|
and | 与门 | and(yout, xin1, xin2, xin3) |
nand | 与非 | nand(yout, xin1, xin2, xin3) |
or | 或门 | or(yout, xin1, xin2, xin3) |
nor | 或非 | nor(yout, xin1, xin2, xin3) |
xor | 异或 | xor(yout, xin1, xin2, xin3) |
xnor | 同或 | nxor(yout, xin1, xin2, xin3) |
n输出组合门
UDP(User Defined Primitive,用户自定义原语)
符号汇总
符号 | 意义 |
---|---|
0,1,x | 逻辑0,1,x为未知值,UDP中没有z |
? | 无关逻辑,可以是0,1,x |
b | 逻辑0或1 |
- | 不变化 |
(xy) | 从x变为y,如(01)为上升沿 |
* | 输入信号的任何变化 |
r | 上升沿 |
f | 下降沿 |
p | 含x的上升沿,等同于(01)、(0x)、(x1) |
n | 含x的下降沿,等同于(10)、(x0)、(1x) |
与门
primitive and(y, x1, x2);
output y;
input x1, x2;
table
// x1 x2 : y
0 0 : 0;
0 1 : 0;
1 0 : 0;
1 1 : 1;
endtable
endprimitive
2输入多路复用器
输入可以是0,1,x,所以考虑所有情况的2输入多路复用器如下:
primitive mux_two(out, select, a, b);
output out;
input select, a, b;
// y = select ? a : b;
table
// select a b : out
0 0 0 : 0;
0 0 1 : 0;
0 0 x : 0;
0 1 0 : 1;
0 1 1 : 1;
0 1 x : 1;
1 0 0 : 0;
1 1 0 : 0;
1 x 0 : 0;
1 0 1 : 1;
1 1 1 : 1;
1 x 1 : 1;
x 0 0 : 0;
x 1 1 : 1;
endtable
endprimitive
使用助记符?简化,?=0,1,x
primitive mux_two(out, select, a, b);
output out;
input select, a, b;
// y = select ? a : b;
table
// select a b : out
0 0 ? : 0;
0 1 ? : 1;
1 ? 0 : 0;
1 ? 1 : 1;
? 0 0 : 0;
? 1 1 : 1;
endtable
endprimitive
透明锁存器(电平敏感)
其实就是带使能的锁存器
primitive latch_with_enable(q_out, enable, data);
output q_out;
input enable, data;
reg q_out;
// q_out = enable ? data : q_out;
// - 表示保持
table
// 时序逻辑table格式
// input1 input2 state : output/next_state
// enable data state : q_out/next_state
1 1 ? : 1;
1 0 ? : 0;
0 ? ? : -;
x 0 0 : -;
x 1 1 : -;
endtable
endprimitive
D触发器(边沿敏感)
primitive DFF(q_out, clk, data);
output q_out;
input clk, data;
reg q_out;
// q_out = posedge(clk) ? data : q_out;
// - 表示保持
table
// 时序逻辑table格式
// input1 input2 state : output/next_state
// clk data state : q_out/next_state
(01) 0 ? : 0;
(01) 1 ? : 1;
(0?) 1 1 : 1;
(?0) ? ? : -;
? (??) ? : -;
endtable
endprimitive