| Line 1... |
Line 1... |
|
|
|
|
|
assign enable = ~( ext_mem_wait || io_reg_wait );
|
|
|
|
|
|
|
|
/* CH0 */
|
|
|
reg mem_cs_r;
|
reg mem_cs_r;
|
|
|
|
|
always@(*)
|
always@(addr_in)
|
begin
|
begin
|
if(addr_in[15:8] == 8'h00) mem_cs = 1'b1;
|
if(addr_in[ADD-1:ADD-CH0_BITS] == CH0_MATCH) mem_cs = 1'b1;
|
else mem_cs = 1'b0;
|
else mem_cs = 1'b0;
|
end
|
end
|
|
|
|
|
always@(posedge clk)
|
always@(posedge clk)
|
| Line 17... |
Line 25... |
|
|
assign mem_addr = addr_in;
|
assign mem_addr = addr_in;
|
assign mem_rd = rd_in;
|
assign mem_rd = rd_in;
|
assign mem_wr = wr_in;
|
assign mem_wr = wr_in;
|
assign mem_wdata = {wdata_in,wdata_in};
|
assign mem_wdata = {wdata_in,wdata_in};
|
assign enable = ~( ext_mem_wait || io_reg_wait );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* CH1 */
|
|
|
reg data_cs_r;
|
reg data_cs_r;
|
|
|
always@(*)
|
always@(addr_in)
|
begin
|
begin
|
if(addr_in[15:12] == 4'b0000) data_cs = 1'b1;
|
if(addr_in[ADD-1:ADD-CH1_BITS] == CH1_MATCH) data_cs = 1'b1;
|
else data_cs = 1'b0;
|
else data_cs = 1'b0;
|
end
|
end
|
|
|
always@(posedge clk)
|
always@(posedge clk)
|
|
|
begin
|
begin
|
data_cs_r <= data_cs;
|
data_cs_r <= data_cs;
|
end
|
end
|
|
|
assign data_addr = addr_in[11:1];
|
assign data_addr = addr_in[ADD-CH1_BITS-1:1];
|
assign data_rd = rd_in;
|
assign data_rd = rd_in;
|
assign data_wr = wr_in;
|
assign data_wr = wr_in;
|
assign data_wdata = {wdata_in,wdata_in};
|
assign data_wdata = {wdata_in,wdata_in};
|
assign data_be[0] = !addr_in[0];
|
assign data_be[0] = !addr_in[0];
|
assign data_be[1] = addr_in[0];
|
assign data_be[1] = addr_in[0];
|
|
|
|
|
|
/* CH2 */
|
|
|
|
|
|
|
|
|
reg io_reg_cs_r;
|
reg io_reg_cs_r;
|
|
|
always@(*)
|
always@(addr_in)
|
begin
|
begin
|
if(addr_in[15:8] == 8'b10000000) io_reg_cs = 1'b1;
|
if(addr_in[ADD-1:ADD-CH2_BITS] == CH2_MATCH) io_reg_cs = 1'b1;
|
else io_reg_cs = 1'b0;
|
else io_reg_cs = 1'b0;
|
end
|
end
|
|
|
always@(posedge clk)
|
always@(posedge clk)
|
|
|
begin
|
begin
|
io_reg_cs_r <= io_reg_cs;
|
io_reg_cs_r <= io_reg_cs;
|
end
|
end
|
|
|
|
|
assign io_reg_addr = addr_in[7:0];
|
assign io_reg_addr = addr_in[ADD-CH2_BITS-1:0];
|
assign io_reg_rd = rd_in;
|
assign io_reg_rd = rd_in;
|
assign io_reg_wr = wr_in;
|
assign io_reg_wr = wr_in;
|
assign io_reg_wdata = wdata_in;
|
assign io_reg_wdata = wdata_in;
|
|
|
|
/* CH3 */
|
|
|
|
|
|
|
|
|
|
|
reg ext_mem_cs_r;
|
reg ext_mem_cs_r;
|
|
|
always@(*)
|
always@(addr_in)
|
begin
|
begin
|
if(addr_in[15:14] == 2'b01) ext_mem_cs = 1'b1;
|
if(addr_in[ADD-1:ADD-CH3_BITS] == CH3_MATCH) ext_mem_cs = 1'b1;
|
else ext_mem_cs = 1'b0;
|
else ext_mem_cs = 1'b0;
|
end
|
end
|
|
|
|
|
always@(posedge clk)
|
always@(posedge clk)
|
|
|
begin
|
begin
|
ext_mem_cs_r <= ext_mem_cs;
|
ext_mem_cs_r <= ext_mem_cs;
|
end
|
end
|
|
|
|
assign ext_mem_addr = addr_in[ADD-CH3_BITS-1:0];
|
|
|
assign ext_mem_addr = addr_in[13:0];
|
|
assign ext_mem_rd = rd_in;
|
assign ext_mem_rd = rd_in;
|
assign ext_mem_wr = wr_in;
|
assign ext_mem_wr = wr_in;
|
assign ext_mem_wdata = {wdata_in,wdata_in};
|
assign ext_mem_wdata = {wdata_in,wdata_in};
|
|
|
|
|
|
/* CH4 */
|
|
|
|
|
reg prog_rom_mem_cs_r;
|
reg prog_rom_mem_cs_r;
|
|
|
|
|
always@(*)
|
always@(addr_in)
|
begin
|
begin
|
if(addr_in[15:12] == 4'b1100) prog_rom_mem_cs = 1'b1;
|
if(addr_in[ADD-1:ADD-CH4_BITS] == CH4_MATCH) prog_rom_mem_cs = 1'b1;
|
else prog_rom_mem_cs = 1'b0;
|
else prog_rom_mem_cs = 1'b0;
|
end
|
end
|
|
|
always@(posedge clk)
|
always@(posedge clk)
|
|
|
begin
|
begin
|
prog_rom_mem_cs_r <= prog_rom_mem_cs;
|
prog_rom_mem_cs_r <= prog_rom_mem_cs;
|
end
|
end
|
|
assign prog_rom_mem_addr = addr_in[ADD-CH4_BITS-1:0];
|
|
|
assign prog_rom_mem_addr = addr_in[11:0];
|
|
assign prog_rom_mem_rd = rd_in;
|
assign prog_rom_mem_rd = rd_in;
|
assign prog_rom_mem_wr = wr_in;
|
assign prog_rom_mem_wr = wr_in;
|
assign prog_rom_mem_wdata = {wdata_in,wdata_in};
|
assign prog_rom_mem_wdata = {wdata_in,wdata_in};
|
|
|
|
/* CH5 */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reg sh_prog_rom_mem_cs_r;
|
reg sh_prog_rom_mem_cs_r;
|
|
|
|
always@(addr_in)
|
always@(*)
|
|
begin
|
begin
|
if(addr_in[15:12] == 4'b1111) sh_prog_rom_mem_cs = 1'b1;
|
if(addr_in[ADD-1:ADD-CH5_BITS] == CH5_MATCH) sh_prog_rom_mem_cs = 1'b1;
|
else sh_prog_rom_mem_cs = 1'b0;
|
else sh_prog_rom_mem_cs = 1'b0;
|
end
|
end
|
|
|
|
|
always@(posedge clk)
|
always@(posedge clk)
|
|
|
begin
|
begin
|
sh_prog_rom_mem_cs_r <= sh_prog_rom_mem_cs;
|
sh_prog_rom_mem_cs_r <= sh_prog_rom_mem_cs;
|
end
|
end
|
|
|
assign sh_prog_rom_mem_addr = addr_in[11:0];
|
assign sh_prog_rom_mem_addr = addr_in[ADD-CH5_BITS-1:0];
|
assign sh_prog_rom_mem_rd = rd_in;
|
assign sh_prog_rom_mem_rd = rd_in;
|
assign sh_prog_rom_mem_wr = wr_in;
|
assign sh_prog_rom_mem_wr = wr_in;
|
assign sh_prog_rom_mem_wdata = {wdata_in,wdata_in};
|
assign sh_prog_rom_mem_wdata = {wdata_in,wdata_in};
|
|
|
|
|