算术逻辑单元_verilog代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5 实验5

5.1 实验内容

题目:使用case语句设计八功能的算术运算单元(ALU),其输入信号a和b均为4位,输入功能选择信号select为3位,输出信号out为5位。算术运算单元ALU所执行的操作与select信号有关,其关系如下:

要求:验证仿真波形

5.2 实验步骤

1.系统设计

题目要求设计简单的算术逻辑单元,该电路通过对指令的判断,对输入数据执行相应的操作,这是一个较为复杂的组合逻辑电路,若用assign语句描述,表达起来非常复杂。故磁体我们使用了电平敏感的always块,并且运用了case结构来进行分支判断,不但设计思想得到了直观地体现,而且代码看起来整齐有序,便于理解

2.重要源代码及注释

module alu(

input [3:0] a,

input [3:0] b,

input [2:0] sel,

output [4:0] out

);

reg [4:0] out;

always@(a or b or sel)

begin

case(sel)

3'b000 : out = a;

3'b001 : out = a + b;

3'b010 : out = a - b;

3'b011 : out = a / b;

3'b100 : out = a % b;

3'b101 : out = a * b;

3'b110 : out = a << b;

3'b111 : out = a >> b;

default: out = 5'bx;

endcase

end

endmodule

5.3 结果分析

1.Testbench代码

module test( );

reg[3:0] a,b;

reg[2:0] sel;

wire[4:0] out;

alu f1(.a(a),.b(b),.sel(sel),.out(out));

initial

begin

a=4'b0000;b=4'b0000;sel=3'b0000;

end

always

fork

#10 sel= 3'b000 ;

#20 sel= 3'b001;

#30 sel= 3'b010 ;

#40 sel= 3'b011 ;

#50 sel= 3'b100 ;

#60 sel= 3'b101;

#70 sel= 3'b110 ;

#80 sel= 3'b111 ;

#10 a=4'b0110;

#20 a=4'b0100;

#15 b=4'b0001;

#30 b=4'b0010;

join

endmodule

2.仿真波形图

3.说明

0~10ns : sel=0 : out=a=0;

10~20ns : sel=0 : out=a=6;

20~30ns : sel=1: out=a+b=5;

30~40ns : sel=2 : out=a-b=2;

40~50ns : sel=3 : out=a/b=2;

50~60ns : sel=4 : out=a%b=0;

60~70ns : sel=5 : out=a*b=8;

70~80ns : sel=6 : out=a<

80~90ns : sel=6 : out=a>>b=1;

out定义的是5位2进制数,只能表示0~31,因此当a*b>31时,out溢出,显示值不正常

相关文档
最新文档