直接参考 https://soc.ustc.edu.cn/Digital/lab1/verilog1/ 就可以了

High-level programe-like Description of Logic circuit

常见的 HDL 语言:

  1. VHDL
  2. Verilog(和 C 语言很像,普及率很高)

标识符:大小写敏感,不能数字开头

特殊值:0 1 Z (高阻态) X(未知)

wire 连线(默认)只能连一次

reg 寄存器

字面量

2’b00 2bits bin 00

6’o00 6bits oct 000 000

8’h00 8bit hex 00000000

3’sb101 3bit sign bin “101” 补码

线只能接一次 默认状态是 z

wire [n-1:0] myvar;//Data bus
wire a;//normal data wire

register 可以赋值多次,纯粹代表一个变量,默认是 x

类型:reg integer real time realtime

reg [n-1:0] a,b;// n bit reg vartiable
reg c,d,e;// 1 bit
reg d[5:0]
module mo(in1,in2);
	...
endmodule

开关层次描述 pmos nmos

门级电路层次描述 and or nand

数据流层次描述 assign

行为级的描述 直接像 C 了 initial (一次性) always(循环)行为流控制关键字和 C 一样

所有电路都是并行工作,只要开始都同步在进行了


module examplemodule(in1, in2, out1, out2); //定义了一个名为examplemodule的模块 
	input in1, in2; //定义了in1和in2为输入端口
	output out1, out2; //定义了out1和out2为输出端口 
	wire x, y; //定义了两个wire类型的中间变量x和y 
	reg a, b; //定义了两个reg类型的中间变量a和b
	assign x=in1&y; //连续赋值语句
	assign module_name u1(in1, in2, …); //调用模块实例 
	always@(in2) //与同一模块的其他并发语句,并行执行 
		begin //过程语句,顺序执行 

		end 
endmodule

阻塞式赋值

reg [1:0] a,b;
 
initial
	begin
	    a=0;
	    b=0;
	end
 
//阻塞
always@(posedge clk)
	begin
	a=a+1;
	b=a+1;
	end
 
//非阻塞
always@(posedge clk)
	begin
	a<=a+1;
	b<=a+1;
	end
	
module ADN_G(A,B,F);
	input A,B;
	input F;
	and U1(F,A,B)
endmodule
 
module ADN_G(A,B,F);
    ...
    assign F = A&B
endmodule

~ | 逻辑计算符

always@( 当参数有改变的时候执行

buf 延时

自带的 module 参数统一第一个是输出,其他都是输入

input [1:0] A;
always@(D0 or D1 or D2 or D3 or A)
case(A)
	2'b00:Y=D0;
	...
endcase