Add constraint file and display module

This commit is contained in:
2024-12-28 09:05:23 +08:00
parent 66cda81233
commit 320f71ac96
3 changed files with 501 additions and 399 deletions

17
Top.sv
View File

@ -13,7 +13,7 @@ module regfile_32x32(
input W0_en, input W0_en,
W0_clk, W0_clk,
input [31:0] W0_data input [31:0] W0_data
); );
reg [31:0] Memory[0:31]; reg [31:0] Memory[0:31];
reg _R0_en_d0; reg _R0_en_d0;
@ -34,6 +34,8 @@ module regfile_32x32(
end // always @(posedge) end // always @(posedge)
assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 32'bx; assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 32'bx;
assign R1_data = _R1_en_d0 ? Memory[_R1_addr_d0] : 32'bx; assign R1_data = _R1_en_d0 ? Memory[_R1_addr_d0] : 32'bx;
// DynamicDisplay show_reg()
endmodule endmodule
module Core( module Core(
@ -46,7 +48,7 @@ module Core(
output io_dmem_wen, output io_dmem_wen,
output [31:0] io_dmem_wdata, output [31:0] io_dmem_wdata,
output io_exit output io_exit
); );
wire [31:0] _regfile_ext_R0_data; wire [31:0] _regfile_ext_R0_data;
wire [31:0] _regfile_ext_R1_data; wire [31:0] _regfile_ext_R1_data;
@ -342,7 +344,7 @@ module mem_512x32(
input W0_en, input W0_en,
W0_clk, W0_clk,
input [31:0] W0_data input [31:0] W0_data
); );
reg [31:0] Memory[0:511]; reg [31:0] Memory[0:511];
reg _R0_en_d0; reg _R0_en_d0;
@ -361,10 +363,11 @@ module mem_512x32(
if (W0_en & 1'h1) if (W0_en & 1'h1)
Memory[W0_addr] <= W0_data; Memory[W0_addr] <= W0_data;
end // always @(posedge) end // always @(posedge)
`ifdef ENABLE_INITIAL_MEM_ `ifdef ENABLE_INITIAL_MEM_
initial initial
$readmemh("src/hex/mem.hex", Memory); $readmemh("src/hex/mem.hex", Memory);
`endif // ENABLE_INITIAL_MEM_ `endif // ENABLE_INITIAL_MEM_
assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 32'bx; assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 32'bx;
assign R1_data = _R1_en_d0 ? Memory[_R1_addr_d0] : 32'bx; assign R1_data = _R1_en_d0 ? Memory[_R1_addr_d0] : 32'bx;
endmodule endmodule
@ -377,7 +380,7 @@ module Memory(
output [31:0] io_dmem_rdata, output [31:0] io_dmem_rdata,
input io_dmem_wen, input io_dmem_wen,
input [31:0] io_dmem_wdata input [31:0] io_dmem_wdata
); );
mem_512x32 mem_ext ( mem_512x32 mem_ext (
.R0_addr (io_imem_addr[10:2]), .R0_addr (io_imem_addr[10:2]),
@ -399,7 +402,7 @@ module Top(
input clock, input clock,
reset, reset,
output io_exit output io_exit
); );
wire [31:0] _memory_io_imem_inst; wire [31:0] _memory_io_imem_inst;
wire [31:0] _memory_io_dmem_rdata; wire [31:0] _memory_io_dmem_rdata;

67
display.sv Executable file
View File

@ -0,0 +1,67 @@
module DynamicDisplay(
input clock,
reset,
input [31:0] reg_result,
output [3:0] io_anodes,
output [6:0] io_segments
);
reg [6:0] digit_segments [0:9];
initial begin
digit_segments[0] = 7'b0000001;
digit_segments[1] = 7'b1001111;
digit_segments[2] = 7'b0010010;
digit_segments[3] = 7'b0000110;
digit_segments[4] = 7'b1001100;
digit_segments[5] = 7'b0100100;
digit_segments[6] = 7'b0100000;
digit_segments[7] = 7'b0001111;
digit_segments[8] = 7'b0000000;
digit_segments[9] = 7'b0000100;
end
reg [3:0] anode_select [0:3];
initial begin
anode_select[0] = 4'b1110;
anode_select[1] = 4'b1101;
anode_select[2] = 4'b1011;
anode_select[3] = 4'b0111;
end
// 扫描计数器和时钟分频
reg [15:0] clkDiv; // 分频计数器
reg [1:0] scanCounter; // 扫描计数器
wire clk1kHz = (clkDiv == 16'd50_000);
always @(posedge clock or posedge reset) begin
if (reset) begin
clkDiv <= 16'd0;
scanCounter <= 2'd0;
end
else begin
if (clk1kHz) begin
clkDiv <= 16'd0;
scanCounter <= scanCounter + 2'd1;
end
else begin
clkDiv <= clkDiv + 16'd1;
end
end
end
reg [3:0] digit_value;
always @(*) begin
case (scanCounter)
2'b11: digit_value = reg_result / 1000; // 千位
2'b10: digit_value = (reg_result / 100) % 10; // 百位
2'b01: digit_value = (reg_result / 10) % 10; // 十位
2'b00: digit_value = reg_result % 10; // 个位
default:
digit_value = 4'd0;
endcase
end
assign io_segments = digit_segments[digit_value];
assign io_anodes = anode_select[scanCounter];
endmodule

32
micore.xdc Executable file
View File

@ -0,0 +1,32 @@
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports clk]
set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property PACKAGE_PIN V17 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports reset]
set_property PACKAGE_PIN E19 [get_ports success_led]
set_property IOSTANDARD LVCMOS33 [get_ports success_led]
set_property PACKAGE_PIN U19 [get_ports fail_led]
set_property IOSTANDARD LVCMOS33 [get_ports fail_led]
set_property PACKAGE_PIN U2 [get_ports {io_anodes[0]}]
set_property PACKAGE_PIN U4 [get_ports {io_anodes[1]}]
set_property PACKAGE_PIN V4 [get_ports {io_anodes[2]}]
set_property PACKAGE_PIN W4 [get_ports {io_anodes[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_anodes[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_anodes[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_anodes[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_anodes[3]}]
set_property PACKAGE_PIN U7 [get_ports {io_segments[0]}]
set_property PACKAGE_PIN V5 [get_ports {io_segments[1]}]
set_property PACKAGE_PIN U5 [get_ports {io_segments[2]}]
set_property PACKAGE_PIN V8 [get_ports {io_segments[3]}]
set_property PACKAGE_PIN U8 [get_ports {io_segments[4]}]
set_property PACKAGE_PIN W6 [get_ports {io_segments[5]}]
set_property PACKAGE_PIN W7 [get_ports {io_segments[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_segments[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_segments[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_segments[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_segments[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_segments[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_segments[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {io_segments[6]}]