西北工业大学 电子信息学院 08021103班
3:begin rsm_db[15:8]<=ps2_byte;i<=i+1;end
4:begin rsm_db[7:0]<=ps2_byte;i<=i+1;end
5:begin i<=0;end endcase end end
assign sm_db=rsm_db;
//caculator part
reg[15:0] buff; reg[7:0] mm1,mm2; reg[3:0] op;
- 26 -
西北工业大学 电子信息学院 08021103班
reg[7:0] num1,num2; reg eoc; reg[3:0] data2; reg[9:0] data1; reg[5:0] a;
reg [7:0] e=8'b0110_0100; parameter
add=4'b1010,sub=4'b1011,mult=4'b1100,div=4'b1101; integer b;
always @(negedge ps2_state or negedge rst_n ) begin if(!rst_n)
begin buff=0;op=0;eoc=0;num1=0;num2=0;end else begin if(data!=4'b1110) begin
if((data>=4'b0000)&&(data<=4'b1001)) begin case(a) 0:begin
data1=data;buff=data1+data1+data1+data1+data1+data1+data1+data1+data1+data1;a<=a+1;end
- 27 -
西北工业大学 电子信息学院 08021103班
1:begin data2=data;buff=buff+data2;a<=0;end endcase end
else if((data>=4'b1010)&&(data<=4'b1110)) begin op=data;num1=buff[7:0];end //!@!!!! end
else begin if(eoc==0) begin
num2=buff[7:0]; case(op) add: begin
buff=num1+num2; eoc=1; end
- 28 -
西北工业大学 电子信息学院 08021103班
sub:
if (num1>num2) begin buff=num1-num2;eoc=1;end else begin
buff=num2-num1;eoc=1;end mult: begin
buff=num1*num2; eoc=1; end div: begin
if(num2==8'b00000000) buff=0; else begin
mm1=num1/num2; mm2=num1%num2; buff=mm1*e+mm2;
- 29 -
西北工业大学 电子信息学院 08021103班
end eoc=1; end endcase end end end end endmodule
//计算结果分位模块
module sy3(sml,smlq,smlb,smls,smlg); input [15:0] sml;
output [15:0] smlq,smlb,smls,smlg;
reg [15:0] smlq,smlb,smls,smlg,smlbb,smlss; reg [15:0] q=16'b000000_11111_01000; reg [15:0] h=16'b000000_00011_00100; reg [15:0] s=16'b000000_00000_01010; always @(sml) begin
- 30 -