要使数码管能够显示移位寄存器所具有的进位功能,需要修改以下几个地方:
将输入端口C0改为输出端口,以便将进位信号输出到数码管;
在always @(din)块中,增加一个case语句来判断CY的值,根据CY的值选择相应的数码管显示;
在always @(posedge clk or posedge rst)块中,对于模式为2'b01的情况,需要将进位信号C0连接到REG[7]上,以实现带进位左移的功能。
修改后的代码如下所示:
module SHIFT3(clk, rst, mode, din, dout, C0);
input clk, rst;
input [1:0] mode;
input [7:0] din;
output [7:0] dout;
output C0;
reg [7:0] dout;
reg [7:0] seg_out;
reg CY = 1'b0;
reg [7:0] REG;
assign C0 = CY;
always @(posedge clk or posedge rst) begin
if (rst)
REG <= 8'b0;
else begin
case(mode)
2'b00: begin
REG[0]<=REG[7];REG[7:1]<=REG[6:0];
end
2'b01: begin
REG[0]<=C0;REG[7:1]<=REG[6:0];REG[7]<=C0;
end
default: begin
CY <= 1'b0;
REG <= din;
end
endcase
end
end
always @(din, CY) begin
case ({CY, din})
8'b00000000: seg_out <= 7'b1111110;
8'b00000001: seg_out <= 7'b0110000;
8'b00000010: seg_out <= 7'b1101101;
8'b00000011: seg_out <= 7'b1111001;
8'b00000100: seg_out <= 7'b0110011;
8'b00000101: seg_out <= 7'b1011011;
8'b00000110: seg_out <= 7'b1011111;
8'b00000111: seg_out <= 7'b1110000;
8'b00001000: seg_out <= 7'b1111111;
8'b00001001: seg_out <= 7'b1111011;
8'b00010000: seg_out <= 7'b0001000; // 显示进位符号
default: seg_out <= 7'b0000001;
endcase
end
always @ (seg_out) begin
dout= seg_out;
end
endmodule