计算机组成原理与组装维护实践教程答案,计算机组成原理_verilog学习_实验一答案(原创)...

//答案

//计组实验1答案

//1-1

//第1关

module fa_behavioral(a,b,ci,s,co);//考虑进位的加法器模块

input a,b;

input ci;

output s;

output co;

// 请在下面添加代码,完成一位全加器功能

/* Begin */

assign {co, s} = a + b +ci;

/* End */

endmodule

//第二关

module adder(a,b,cin,cout,sum);

parameter bit_width=8;

output[bit_width-1:0] sum;

output cout;

input [bit_width-1:0] a,b;

input cin;

// 请在下面添加代码,完成n=8位的无符号二进制数加法器功能

/* Begin */

assign {cout, sum} = a + b + cin;

/* End */

endmodule

//第三关

module substractor(a,b,cin,cout,sum);

parameter bit_width=8;

output [bit_width-1:0] sum;

output cout;

input [bit_width-1:0] a,b;

input cin;//carry

// 请在下面添加代码,完成n位的无符号二进制数减法器功能

/* Begin */

assign sum = (a + ~b + 1 + cin);

assign cout = (a < b);

/* End */

endmodule

//第四关

module add_sub(a,b,control,cout,overflow,sum);

parameter bit_width=4;

output reg[bit_width-1:0] sum; output cout,overflow;

input [bit_width-1:0] a,b; input control;//carry

reg overflow,cout;

reg [bit_width:0] a2,b2,sum2;

always@(control or a or b)

begin

a2[bit_width]=a[bit_width-1]; //将a符号位扩展成2位并赋值给a2

a2[bit_width-1:0]=a[bit_width-1:0];

// 请在下面添加代码,将b符号位扩展成2位并赋值给b2

/********** Begin *********/

b2[bit_width]=b[bit_width-1]; //将b符号位扩展成2位并赋值给b2

b2[bit_width-1:0]=b[bit_width-1:0];

/********** End *********/

if (control==0) {cout,sum2}=a2+b2;

else {cout,sum2}=a2+(~b2)+control;

if((sum2[bit_width]^sum2[bit_width-1])==1) overflow=1;

else overflow=0; //用双符号位判溢出

sum[bit_width-1:0]=sum2[bit_width-1:0];

end

endmodule

//1-2

//第一关

//设计一个输入输出均为高电平有效的3位二进制优先编码器

//I[7]的优先权最高,I[0]的优先权最低

module encoder8_3_test(I,Y);

input [7:0] I;

output reg[2:0] Y;

always @(I)

begin

if(I >= 8'b00000000 && I < 8'b00000010)

Y = 3'b000;

if(I >= 8'b00000010 && I < 8'b00000100)

Y = 3'b001;

if(I >= 8'b00000100 && I < 8'b00001000)

Y = 3'b010;

if(I >= 8'b00001000 && I < 8'b00010000)

Y = 3'b011;

if(I >= 8'b00010000 && I < 8'b00100000)

Y = 3'b100;

if(I >= 8'b00100000 && I < 8'b01000000)

Y = 3'b101;

if(I >= 8'b01000000 && I < 8'b10000000)

Y = 3'b110;

if(I >= 8'b10000000)

Y = 3'b111;

end

/* End */

endmodule

//第二关

//设计具有一位使能端的3线-8线译码器。当使能端为0时,8位输出信号全为0;

//如果一位使能信号为1,则输出高电平有效的译码信号。

module decoder3e_test(a,ena,y);

input [2:0] a;

input ena;

output reg[7:0] y;

// 请在下面添加代码,完成设计任务

/* Begin */

always @(ena or a)

begin

if (ena == 0)

y = 8'b00000000;

else

case(a)

3'b000: y = 8'b00000001;

3'b001: y = 8'b00000010;

3'b010: y = 8'b00000100;

3'b011: y = 8'b00001000;

3'b100: y = 8'b00010000;

3'b101: y = 8'b00100000;

3'b110: y = 8'b01000000;

3'b111: y = 8'b10000000;

default: y = 8'b00000000;

endcase

end

/* End */

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值