EDA学习记录(二)组合电路的Verilog设计

目录

前言:

一,半加器电路

1,原理(待补充)

2,verilog语言

(1)模块语句

(2)端口语句,端口信号,端口模式

(3)逻辑操作符

(4)连续赋值语句


前言:

一,半加器电路

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

(2)if条件语句

(3)过程赋值语句

(4)数据类型表达方式

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值