module fsj_5(RA, wt, rd, m, rst, clk, d, out, sel); input [1:0]RA; //通用寄存器选择 input rd, wt, rst, clk; //读开关,写开关,置零开关,时钟 input [1:0]m; //功能选择 input [15:0]d; //输入 output reg [7:0]out; //数码管输出 output reg [2:0]sel; //数码管3-8译码器输出 reg [3:0]data; reg [15:0]R0; reg [15:0]R1; reg [15:0]R2; reg [15:0]R3; reg [15:0]mid; reg [15:0]counter; reg clk_alt; reg [2:0]l; //变频段 always @(negedge clk) begin if(l>=7) l=0; else l=1+l; clk_alt=l[2]; end //读写操作 always @(RA or rd or wt) begin case(RA) 0:begin if(rd==1&&wt==0) R0=d; else if(rd==0&&wt==1) mid=R0; end 1:begin if(rd==1&&wt==0)R1=d; else if(rd==0&&wt==1)mid=R1; end 2:begin if(rd==1&&wt==0) R2=d; else if(rd==0&&wt==1) mid=R2; end 3:begin if(rd==1&&wt==0) R3=d; else if(rd==0&&wt==1) mid=R3; end endcase end //PC寄存器 always @(negedge clk_alt) begin if(rst==0)counter=0; else case(m) 1:counter=counter-1; 2:counter=counter+1; 3:counter=mid; endcase end //output always @(negedge clk) begin sel=sel+1; if(sel>=8) sel=0; case(sel) 0:data=counter[15:12]; 1:data=counter[11:8]; 2:data=counter[7:4]; 3:data=counter[3:0]; 4:data=mid[15:12]; 5:data=mid[11:8]; 6:data=mid[7:4]; 7:data=mid[3:0]; endcase end //译码 always case (data) 0:out=63; 1:out=6; 2:out=91; 3:out=79; 4:out=102; 5:out=109; 6:out=125; 7:out=7; 8:out=127; 9:out=111; 10:out=119; 11:out=124; 12:out=57; 13:out=94; 14:out=121; 15:out=113; endcase endmodule将这段代码修改成可以使用键盘输入数据
时间: 2023-06-14 07:05:47 浏览: 71
module fsj_5(RA, wt, rd, m, rst, clk, key, out, sel);
input [1:0]RA; //通用寄存器选择
input rd, wt, rst, clk; //读开关,写开关,置零开关,时钟
input [1:0]m; //功能选择
input [3:0]key; //键盘输入
output reg [7:0]out; //数码管输出
output reg [2:0]sel; //数码管3-8译码器输出
reg [3:0]data;
reg [15:0]R0;
reg [15:0]R1;
reg [15:0]R2;
reg [15:0]R3;
reg [15:0]mid;
reg [15:0]counter;
reg clk_alt;
reg [2:0]l; //变频段
always @(negedge clk) begin
if(l>=7) l=0;
else l=1+l;
clk_alt=l[2];
end
always @(RA or rd or wt) begin
case(RA)
0:begin
if(rd==1&&wt==0) R0=key; //修改此处,将键盘输入写入寄存器
else if(rd==0&&wt==1) mid=R0;
end
1:begin
if(rd==1&&wt==0)R1=key;
else if(rd==0&&wt==1)mid=R1;
end
2:begin
if(rd==1&&wt==0) R2=key;
else if(rd==0&&wt==1) mid=R2;
end
3:begin
if(rd==1&&wt==0) R3=key;
else if(rd==0&&wt==1) mid=R3;
end
endcase
end
always @(negedge clk_alt) begin
if(rst==0)counter=0;
else
case(m)
1:counter=counter-1;
2:counter=counter+1;
3:counter=mid;
endcase
end
always @(negedge clk) begin
sel=sel+1;
if(sel>=8) sel=0;
case(sel)
0:data=counter[15:12];
1:data=counter[11:8];
2:data=counter[7:4];
3:data=counter[3:0];
4:data=mid[15:12];
5:data=mid[11:8];
6:data=mid[7:4];
7:data=mid[3:0];
endcase
end
always
case (data)
4'b0000:out=8'b00111111;
4'b0001:out=8'b00000110;
4'b0010:out=8'b01011011;
4'b0011:out=8'b01001111;
4'b0100:out=8'b01100110;
4'b0101:out=8'b01101101;
4'b0110:out=8'b01111101;
4'b0111:out=8'b00000111;
4'b1000:out=8'b01111111;
4'b1001:out=8'b01101111;
4'b1010:out=8'b01110111;
4'b1011:out=8'b01111100;
4'b1100:out=8'b00111001;
4'b1101:out=8'b01011110;
4'b1110:out=8'b01111001;
4'b1111:out=8'b01110001;
endcase
endmodule