第七讲组合逻辑电路的Verilog设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本门电路的Verilog描述
1. assign语句 assign out = a & b;
2. 门原语 xor xor1(out, a, b);
三态门的Verilog描述
1. assign 语句 assign dout = en ? din : ‘bz;
2. 条件语句 if( en==1 ) else
b
1010
a<<1
b
1011
a>>1
a
?
b 1
具体电路结构
取反 加减 与/或 异或 左移 右移
?
out
实现代码(1)
module alu ( in1, in2, op, out ); input [15:0] in1, in2; input [3:0] op; output [15:0] out;
dout = din; dout = ‘bz;
全加器的Verilog描述
wire [3:0] x,y;
wire cin;
reg [3:0] sum;
reg cout;
描述1:assign {cout, sum} = x + y + cin;
描述2:always @ ( x or y or cin)
endcase end
dout = 3’b111; dout = 3’b110; dout = 3’b101; dout = 3’b100;
dout = 3’b000; dout = 3’bx;
多路选择器
always @* begin
case (sel) 2’b00: Out = A; 2’b01: Out = B; 2’b10: Out = C; 2’b11: Out = D; default : Out = 0;
复习
组合逻辑电路的概念 组合逻辑电路的特点 组合逻辑的描述方法 常用的组合逻辑电路
描述设计的三种基本方式
数据流方式 结构方式 行为方式
assign语句 模块、原语实例化 always、initial语句
Verilog描述组合逻辑电路
assign语句(被赋值类型?) always语句(敏感事件?赋值类型?) 门原语
begin
{cout,sum} = x + y +cin;
end
描述3:。。。 FPGA器件中,通过快速
进位通道可以提高加法 器的运行速度
比较器的Verilog描述
1. if 语句
always @ ( a or b )
begin
if ( a = b) {agb, asb, aeb} = 3’b001;
dout = 3’b111; dout = 3’bx;
优先编码器的Verilog描述
always @ (din) begin
casex(din) 8’b1xxx_xxxx: 8’b01xx_xxxx: 8’b001x_xxxx: 8’b0001_xxxx: … 8’b0000_0001: default :
case(din) 8’b0000_0001: 8’b0000_0010: 8’b0000_0100: 8’b0000_1000: … 8’b1000_0000: default :
endcase end
dout = 3’b000; dout = 3’b001; dout = 3’b010; dout = 3’b011;
else if( a>b ) {agb, asb, aeb} = 3’b100;
else if( a<b ) {agb, asb, aeb} = 3’b010;
else
{agb, asb, aeb} = 3’bxxx;
end
2. case语句
编码器的Verilog描述
always @ (din) begin
endcase end
Sel
A
B
Out
C
D
应用实例——CPU简 单运算单元
MIPS五级流水线结构
in1
a
运
a
算
a
单
a
元 功
a
能
a
表
a
a
a
a
a
in2
op
out
b
0001
a
b
0010
a+1
b
0011
a-1
b
0100
a+b
b
0101
a-b
b
0110
a&b
b
0111
a|b
b
1000
a^b
b
1001
~a
always @ (in1 or in2 or op)
begin
case (op)
Transfer :
out = in1;
Increase :
out = in1 + 1;
Decrease:
out = in1 – 1;
Addition :
out = in1 + in2;
Subtraction : out = in1 – in2;
AND:
out = a & b;
OR :
out = a | b;
XOR : NOT :
out = a ^ b; out = ~a;
Shift_Left :
out = a << 1;
Shift_Right : out = a >> 1;
endcase
end
谢谢~
Hale Waihona Puke wire [15:0] in1, in2; wire [3:0] op; reg [15:0] out;
parameter 与 define的区别
实现代码(2)
parameter Transfer = 4’b0001, Increase = 4’b0010, Decrease = 4’b0011, Addition = 4’b0100, Subtraction = 4’b0101, AND = 4’b0110, OR = 4’b0111, XOR = 4’b1000, NOT = 4’b1001, Shift_Left = 4’b1010, Shift_Right = 4’b1011;