| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- module RegMap #(
- parameter CmdRegWidth = 32,
- parameter AddrRegWidth = 12
- )
- (
- input [CmdRegWidth/2-1:0] Data_i,
- input [AddrRegWidth-1:0] Addr_i,
- input Clk_i,
- input Rst_i,
- input wrEn_i,
- input rdEn_i,
- input [1:0] BE_i,
- output [CmdRegWidth/2-1:0] AnsDataReg_o,
- output Led_o
- );
- //================================================================================
- // REG/WIRE
- //================================================================================
- (* dont_touch = "TRUE" *)reg [CmdRegWidth-1:0] LedReg;
- (* dont_touch = "TRUE" *)reg [CmdRegWidth/2-1:0] debugReg1;
- (* dont_touch = "TRUE" *)reg [CmdRegWidth/2-1:0] debugReg2;
- (* dont_touch = "TRUE" *)reg [CmdRegWidth/2-1:0] ansReg;
- //================================================================================
- // ASSIGNMENTS
- //================================================================================
- assign Led_o = LedReg[0];
- assign AnsDataReg_o = ansReg;
- //================================================================================
- // LOCALPARAMS
- //================================================================================
- localparam LedAddr = 12'h00;
- localparam LedAddrS = 12'h02;
- localparam DebugAddr1 = 12'h04;
- localparam DebugAddr2 = 12'h06;
- //================================================================================
- always @(posedge Clk_i) begin
- if (Rst_i) begin
- LedReg <= 0;
- debugReg1 <= 0;
- debugReg2 <= 0;
- end
- else begin
- if (!wrEn_i) begin
- case (BE_i)
- 0 : begin
- case (Addr_i)
- LedAddr : begin
- LedReg[15:0] <= Data_i;
- end
- LedAddrS : begin
- LedReg[31:16] <= Data_i;
- end
- DebugAddr1 : begin
- debugReg1 <= Data_i;
- end
- DebugAddr2 : begin
- debugReg2 <= Data_i;
- end
- endcase
- end
- 1 : begin
- case (Addr_i)
- LedAddr : begin
- LedReg[15:0] <= Data_i[15:8];
- end
- LedAddrS : begin
- LedReg[31:16] <= Data_i[15:8];
- end
- DebugAddr1 : begin
- debugReg1[15:8] <= Data_i[15:8];
- end
- DebugAddr2 : begin
- debugReg2[15:8] <= Data_i[15:8];
- end
- endcase
- end
- 2 : begin
- case (Addr_i)
- LedAddr : begin
- LedReg[15:0] <= Data_i[7:0];
- end
- LedAddrS : begin
- LedReg[31:16] <= Data_i[7:0];
- end
- DebugAddr1 : begin
- debugReg1[7:0] <= Data_i[7:0];
- end
- DebugAddr2 : begin
- debugReg2[7:0] <= Data_i[7:0];
- end
- endcase
- end
- endcase
- end
- end
- end
- // always @(*) begin
- // if (Rst_i) begin
- // ansReg = 0;
- // end
- // else begin
- // if (rdEn_i) begin
- // case (Addr_i)
- // LedAddrS : begin
- // ansReg = LedReg;
- // end
- // DebugAddr1 : begin
- // ansReg = debugReg1;
- // end
- // DebugAddr2 : begin
- // ansReg = debugReg2;
- // end
- // endcase
- // end
- // else begin
- // ansReg = 0;
- // end
- // end
- // end
- always @(*) begin
- if (Rst_i) begin
- ansReg = 0;
- end
- else begin
- if (!rdEn_i) begin
- case(BE_i)
- 0 : begin
- case (Addr_i)
- LedAddr : begin
- ansReg = LedReg[15:0];
- end
- LedAddrS : begin
- ansReg = LedReg[31:16];
- end
- DebugAddr1 : begin
- ansReg = debugReg1;
- end
- DebugAddr2 : begin
- ansReg = debugReg2;
- end
- endcase
- end
- 1 : begin
- case (Addr_i)
- LedAddr : begin
- ansReg = LedReg[15:8];
- end
- LedAddrS : begin
- ansReg = LedReg[31:24];
- end
- DebugAddr1 : begin
- ansReg = debugReg1[15:8];
- end
- DebugAddr2 : begin
- ansReg = debugReg2[15:8];
- end
- endcase
- end
- 2 : begin
- case (Addr_i)
- LedAddr : begin
- ansReg = LedReg[7:0];
- end
- LedAddrS : begin
- ansReg = LedReg[23:16];
- end
- DebugAddr1 : begin
- ansReg = debugReg1[7:0];
- end
- DebugAddr2 : begin
- ansReg = debugReg2[7:0];
- end
- endcase
- end
- endcase
- end
- else begin
- ansReg = 0;
- end
- end
- end
- endmodule
|