FPGA--CPU指令运算器设计

实验分析和设计

  1. 功能定义

完成的具体功能定义如下:

操作类型1:将操作数1作为一个无符号二进制数,在七段管以十进制显示二进制序列等效值。

操作类型2:实现操作数3、操作数4之间相加、减、乘的操作,在七段管以十/十六进制进制显示操作数和结果。操作数3和4为BCD码表示的2位十进制数(表示的值为00-99)。

  1. 设计模块及代码

 

Ⅰ、主模块

module hard01(key,x2,x3,Hex0,Hex1,Hex2,Hex3,Hex4,Hex5,Hex6,Hex7,x);

input [7:0] x2,x3;

input key;

reg[7:0] x1;

input [1:0] x;//表示七段管的显示模式

output reg[6:0] Hex0,Hex1,Hex2,Hex3,Hex4,Hex5,Hex6,Hex7;

reg[11:0] add;

reg[7:0] sub;

reg[13:0] mul;

wire[7:0] n3,n2;

integer flag;//符号标志位

//加法变量

reg cout1,cout2;

reg [6:0] fh;

reg [3:0] low,low0,mid,mid0;

reg [3:0] a1,a2,a3,a4;//乘法各位表达

reg [3:0] t1,t2,t3;//x1的值

reg [3:0] s1,s2;

assign n2=x2[7:4]*10+x2[3:0];

assign n3=x3[7:4]*10+x3[3:0];

always@(*)

begin

   if(key==1)

begin

   x1=x2;

   t1=x1%4'b1010;

t2=x1/4'b1010%4'b1010;

t3=x1/4'b1010/4'b1010;

end

end

//加法,二级流水线方式

always@(*)

begin

{cout1,low0}=x2[3:0]+x3[3:0];

if(cout1==1) begin low=low0+4'b0110; end

else if(low0>9&&cout1==0) begin {cout1,low}=low0+4'b0110;end

else begin low=low0;cout1=0;end

end



always@(*)

begin

{cout2,mid0}=x2[7:4]+x3[7:4]+cout1;

if(cout2==1) begin mid=mid0+4'b0110; end

else if(mid0>9&&cout2==0) begin {cout2,mid}=mid0+4'b0110;end

else begin mid=mid0;cout2=0;end

add={cout2,mid,low};

end

//减法

always@(*)

begin

flag=0;

if(n2>=n3) sub=n2-n3;

else begin flag=1;sub=n3-n2;end

fh=(flag==1)?7'b0111111:7'b1111111;

   s1=sub%4'b1010;  

s2=sub/4'b1010;

end

//乘法

always@(*)

begin

   mul=n2*n3;

   a1=mul%4'b1010;  

a2=mul/4'b1010%4'b1010;

a3=mul/4'b1010/4'b1010%4'b1010;

a4=mul/4'b1010/4'b1010/4'b1010;

end



always@(x)

begin

case(x)

2'b00:begin {Hex2,Hex1,Hex0}={show(t3),show(t2),show(t1)};Hex3=7'b1111111;Hex4=7'b1111111;Hex5=7'b1111111;Hex6=7'b1111111;Hex7=7'b1111111;end

2'b01:begin {Hex7,Hex6}={show(x2[7:4]),show(x2[3:0])};{Hex5,Hex4}={show(x3[7:4]),show(x3[3:0])};

{Hex2,Hex1,Hex0}={show(add[11:8]),show(add[7:4]),show(add[3:0])};Hex3=7'b1111111;  end

2'b10:begin {Hex7,Hex6}={show(x2[7:4]),show(x2[3:0])};{Hex5,Hex4}={show(x3[7:4]),show(x3[3:0])};

{Hex2,Hex1,Hex0}={fh,show(s2),show(s1)};Hex3=7'b1111111;  end

2'b11:begin {Hex7,Hex6}={show(x2[7:4]),show(x2[3:0])};{Hex5,Hex4}={show(x3[7:4]),show(x3[3:0])};

{Hex3,Hex2,Hex1,Hex0}={show(a4),show(a3),show(a2),show(a1)};  end

endcase

end



function [6:0]show;

   input[3:0] a0;

reg[6:0] b;

begin

case(a0)

  4'd0:b=7'b1000000;

  4'd1:b=7'b1111001;

  4'd2:b=7'b0100100;

  4'd3:b=7'b0110000;

  4'd4:b=7'b0011001;

  4'd5:b=7'b0010010;

  4'd6:b=7'b0000010;

  4'd7:b=7'b1111000;  

  4'd8:b=7'b0000000;

  4'd9:b=7'b0011000;

default:b=7'b1111111;

endcase

show=b;

end

endfunction

endmodule



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值