diff --git a/pipelined-cpu/srcs/board/cpu21_board_top.v b/pipelined-cpu/srcs/board/cpu21_board_top.v index 09e9b6a..74e3eec 100644 --- a/pipelined-cpu/srcs/board/cpu21_board_top.v +++ b/pipelined-cpu/srcs/board/cpu21_board_top.v @@ -135,8 +135,16 @@ module cpu21_board_top #( wire [15:0] sw_vec = {12'b0, sw_flag, irq_sw}; // 中断连线:SW0 与鼠标共用一个入口,SW1 与"关卡入口"共用一个入口。 wire [ 2:0] irq_vec = {irq_sw[2], (level_irq | irq_sw[1]), (mouse_irq | irq_sw[0])}; - for (i = 0; i < ROM_WORDS; i = i + 1) - rom[i] = 32'h0000_0013; // NOP 填充 + + // --------------------------------------------------------------------------- + // 指令 ROM:组合读(未用到的地址填 NOP) + // --------------------------------------------------------------------------- + reg [31:0] rom [0:ROM_WORDS-1]; + integer i; + + initial begin + for (i = 0; i < ROM_WORDS; i = i + 1) + rom[i] = 32'h0000_0013; // NOP 填充 `ifdef SAOLEI_ROM // 扫雷程序(由 saolei/tools/build.ps1 生成的 cpu21_saolei_rom.vh)。 // 综合/仿真时定义宏 SAOLEI_ROM 即可切换到这个程序;不定义就是下面的跑马灯。 @@ -305,8 +313,7 @@ cpu21_vga u_vga ( .vga_r (vga_r), .vga_g (vga_g), .vga_b (vga_b), - Tcl 一键重建 -ga_hs (vga_hs), + .vga_hs (vga_hs), .vga_vs (vga_vs), .frame_tick_o(frame_tick) ); @@ -337,7 +344,8 @@ generate .ps2_clk_oe_o (), .ps2_data_i (ps2_data), .ps2_data_oe_o(), - .ev_valid_o (ev_valid), + Tcl 一键重建 + .ev_valid_o (ev_valid), .ev_dx_o (ev_dx), .ev_dy_o (ev_dy), .ev_btn_o (ev_btn), diff --git a/pipelined-cpu/srcs/rtl/cpu21_ps2_mouse.v b/pipelined-cpu/srcs/rtl/cpu21_ps2_mouse.v index 5afbbfd..0fce540 100644 --- a/pipelined-cpu/srcs/rtl/cpu21_ps2_mouse.v +++ b/pipelined-cpu/srcs/rtl/cpu21_ps2_mouse.v @@ -39,12 +39,12 @@ module cpu21_ps2_mouse ( output reg [15:0] rx_count_o ); - // 开漏:oe = 1 时把线拉低,否则高阻(外部上拉) - assign ps2_clk_oe_o = 1'b0; // 本设计只接收,不主动拉低时钟(除了初始化) - assign ps2_data_oe_o = init_oe; - 。本模块只接收,两条线都不驱动。 - assign ps2_clk_oe_o = 1'b0; - assign ps2_data_oe_o = 1'b02_data_s1, ps2_data_s2; + // 开漏:oe = 1 时把线拉低,否则高阻(外部上拉)。本模块只接收,两条线都不驱动。 + assign ps2_clk_oe_o = 1'b0; + assign ps2_data_oe_o = 1'b0; + + // 两级同步 + reg ps2_clk_s1, ps2_clk_s2, ps2_data_s1, ps2_data_s2; always @(posedge clk or posedge reset) begin if (reset) begin ps2_clk_s1 <= 1'b1;