目录
前言:
一,半加器电路
1,原理(待补充)
半加器的逻辑表达式
半加器的电路结构,半加器的真值表,半加器电路的时序表达
2,verilog语言
module h_adder (A,B,SO,CO);
input A,B; //input 模块外部端口描述语句,输入
output SO,CO; //output 同理,输出
assign SO = A^B; //assign 用于描述逻辑功能和电路结构
assign CO = A&B;
endmodule
(1)模块语句
module 模块名 (模块端口名表);
模块端口和模块功能描述
endmodule
(2)端口语句,端口信号,端口模式
input 端口名1,端口名2......; //输入端口
output 端口名1,端口名2......; //输出端口
inout 端口名1,端口名2......; //双向端口,如RAM的数据口,单片机的I/O口
input[msb:lsb] 端口名1,端口名2......; //多信号端口或总线端口
msb:lsb 信号矢量的最高位和最低位
eg. output[0:3] C,D;
表示的是C[3:0],D[3:0]
C[3:0]表示:C[3],C[2],C[1],C[0]
(3)逻辑操作符&,^
逻辑与 &
逻辑异或 ^
(4)连续赋值语句
assign 目标变量名=驱动表达式;
assign [延时] 目标变量名=驱动表达式;
`timescale 10ns/100ps; //仿真的基本时间是10ns,仿真时间的精度是100ps
assign #6 R1 = A & B; //6个时间单元才执行运算赋值,即60ns
注意!timescale前的符号为反单引号 ( ` ),不是单引号 ( ' )
二,多路选择器
1,4选1多路选择器 case语句
(0)代码部分
module MUX41a (a,b,c,d,s1,s0,y);
input a,b,c,d;
input s1,s0;
output y;
reg y;
always@(a or b or c or d or s1 or s0)
begin : MUX41
case ({s1,s0})
2'b00:y=a;
2'b01:y=b;
2'b10:y=c;
2'b11:y=d;
default :y=a;
endcase
end
endmodule
代码解释
(1)reg型变量
reg用于定义特定类型的的变量,即寄存器型变量或称寄存器型数据类型的变量
reg 变量名1,变量名2,......;
reg[msb:lsb] 变量名1,变量名2,......;
(2)过程语句
always@(敏感信号及敏感信号列表或表达式)
包括块语句的各类顺序语句
(3)块语句 begin_end
begin [:块名]
语句1;语句2;...语句n;
end
(4)case语句
case(表达式)
取值1:begin 语句1;语句2;...语句n; end
取值2:begin 语句n+1;语句n=2;...语句n+m; end
...
default : begin 语句n+m+1;...; end
endcase
(5)Verilog de 四种逻辑状态
0。含义有四个,即二进制数0、低电平、逻辑0、事件为伪的判断结果。
1。含义也有四个,即二进制数1、高电平、逻辑1、事件为真的判断结果。
z或Z。高阻态,或高阻值。
x或X。不确定,或未知的逻辑状态。x与z大小写都不分。.
(6)并位操作运算符{ }
(7)Verilog的数字表达形式 2'b00
<位宽>'<进制><数字>
B二进制
O八进制
H十六进制
D十进制
(8)仿真结果
2,.......assign语句表达方式
(1)代码部分
module MUX41a (a,b,c,d,s1,s0,y);
input a,b,c,d,s1,s0;
output y;
wire [1:0] SEL;
wire AT,BT,CT,DT;
assign SEL = {s1,s0};
assign AT = (SEL==2'D0);
assign BT = (SEL==2'D1);
assign CT = (SEL==2'D2);
assign DT = (SEL==2'D3);
assign y =(a&AT)|(b&BT)|(c&CT)|(d&DT);
endmodule
(2)按位逻辑操作符
(3)等式操作符 ==
(4)wire定义网线型变量
wire 变量名1,变量名2..;
wire[msb:lsb] 变量名1,变量名2..;
wire与assign的赋值性质一致,
wire Y= a1^a2;
可以取代
wire a1,a2;
assgin Y= a1^a2;
3,....条件赋值语句表述方式
(1)代码
module MUX41a (A,B,C,D,S1,S0,Y);
input A,B,C,D,S1,S0;
output Y;
wire AT = S0?D:C;
wire BT = S0?B:A;
wire Y =(S1?AT:BT);
endmodule
(2)条件表达式 ?
条件表达式 ? 表达式1 : 表达式2
wire AT = S0?D:C; //如果S0=1成立,则AT=D;如果S0=0,则AT=C
5,..... 条件语句表达式方式
(1)代码
module MUX41a (A,B,C,D,S1,S0,Y);
input A,B,C,D,S1,S0;
output Y;
reg[1:0]SEL;
reg Y;
always @ (A,B,C,D,SEL)
begin
SEL = {S1,S0};
if (SEL==0) Y=A;
else if (SEL==1) Y=B;
else if (SEL==2) Y=C;
else Y=D;
end
endmodule