门原语

逻辑门

  • and/nand

  • or/nor

  • xor/xnor

    以上六个为多输入单输出

  • buf/not

    以上两个为单输入多输出

1
2
3
4
gate_type	[instance_name1] (term1, term2, ..., termN),
[instance_name2] (term1, term2, ..., termN),
......
[instance_nameN] (term1, term2, ..., termN);

多个门同时实例化时,结尾用逗号,最后用分号。第一个端口为输出,其余为输入。

对于多输出门,最后一个为输入。

行为描述建模

你会怎么设计一个二输入与非门?

  • 有些人认为只是一个代表NAND操作者行为的块
  • 还有一些人可能会想到CMOS中的四个门7400芯片中的四个门
  • 在逻辑层面工作的设计者会想到 NAND门的逻辑符号
  • 晶体管级的电路设计者想到的是实现NAND功能的晶体管级电路
  • 在版图设计者的脑海中闪过的是 NAND门的布局

考试要看清书写的层次

可综合的VHDL

Verilog HDL最初的目的不是做电路设计,所以可综合风格的VerilogHDL的语法只是其语法的一个子集

UDP-用户定义原语

UDP不可综合

1
2
3
4
5
6
7
8
9
primitive UDP_name(OutputName, List_of_inputs)
Output_declaration
list_of_input_declarations
[reg_declaration]
[initial_statement]
table
list_of_table_entries
endtable
endprimitive

例:边沿触发的时序电路UDP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
primitive d_edge_flip_flop(q, clk, data);
output q;
reg q;
input data, clk;
initial q=0; //这是可选的,只能有一个赋值语句,只能对reg赋值
table // clk data q(state) q(next)
(01) 0 : ? : 0; //(01)表示从0到1的变化
(01) 1 : ? : 1;
(0x) 1 : 1 : 1; //(0x)表示从0到x的变化
(0x) 0 : 0 : 0;
(?0) ? : ? : -; //忽略时钟负沿,(?0)任意值变化到0
? (??) : ? : -; //忽略稳定的时钟上的数据变化
endtable
//(??)表示任意的变化
endprimitive
//对于未定义的变化,输出默认值未x。