OpenCores
URL https://opencores.org/ocsvn/tv80/tv80/trunk

Subversion Repositories tv80

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /tv80/trunk
    from Rev 104 to Rev 105
    Reverse comparison

Rev 104 → Rev 105

/rtl/app_localcfg/lcfg.v
26,7 → 26,7
// read/write processor memory
input cfgi_irdy,
output cfgi_trdy,
input [14:0] cfgi_addr,
input [12:0] cfgi_addr,
input cfgi_write,
input [31:0] cfgi_wr_data,
output [31:0] cfgi_rd_data,
161,7 → 161,7
);
*/
lcfg_memctl memctl
lcfg_memctl #(.mem_asz(13)) memctl
(/*AUTOINST*/
// Outputs
.a_wait_n (ram_wait_n), // Templated
184,17 → 184,11
.b_wdata (32'h0), // Templated
.lcfg_init (lcfg_init),
.cfgi_irdy (cfgi_irdy),
.cfgi_addr (cfgi_addr[14:0]),
.cfgi_addr (cfgi_addr[12:0]),
.cfgi_write (cfgi_write),
.cfgi_wr_data (cfgi_wr_data[31:0]),
.test_resume_h (test_resume_h));
.cfgi_wr_data (cfgi_wr_data[31:0]));
// DMA not needed
// Need GP interrupt register for timer
 
assign cfg_addr = { reg_addr1, reg_addr0 };
assign cfg_wr_data = { reg_wr_data3, reg_wr_data2, reg_wr_data1, reg_wr_data0 };
 
/* lcfg_cfgo_driver AUTO_TEMPLATE
(
.cd_wdata (dout[7:0]),
/rtl/app_localcfg/lcfg_memctl.v
23,9 → 23,12
// Inputs
clk, reset_n, a_mreq_n, a_rd_n, a_wr_n, a_addr, a_wdata, b_mreq_n,
b_wr_n, b_addr, b_wdata, lcfg_init, cfgi_irdy, cfgi_addr,
cfgi_write, cfgi_wr_data, test_resume_h
cfgi_write, cfgi_wr_data
);
 
// address size of memory
parameter mem_asz = 13, mem_depth = 8192;
 
input clk;
input reset_n;
 
33,7 → 36,7
input a_mreq_n;
input a_rd_n;
input a_wr_n;
input [14:0] a_addr;
input [mem_asz+1:0] a_addr;
output a_wait_n;
input [7:0] a_wdata;
output [7:0] a_rdata;
42,7 → 45,7
// read port B
input b_mreq_n;
input b_wr_n;
input [12:0] b_addr;
input [mem_asz-1:0] b_addr;
output b_wait_n;
input [31:0] b_wdata;
output [31:0] b_rdata;
54,24 → 57,22
// read/write processor memory
input cfgi_irdy;
output cfgi_trdy;
input [14:0] cfgi_addr;
input [mem_asz-1:0] cfgi_addr;
input cfgi_write;
input [31:0] cfgi_wr_data;
output [31:0] cfgi_rd_data;
reg cfgi_trdy, nxt_cfgi_trdy;
 
input test_resume_h;
reg ram_nwrt;
reg ram_nce;
reg [31:0] ram_din;
reg [12:0] ram_addr;
reg [mem_asz-1:0] ram_addr;
wire [31:0] dout;
reg [7:0] a_rdata;
 
reg [12:0] ca_addr, nxt_ca_addr;
reg [mem_asz-1:0] ca_addr, nxt_ca_addr;
reg [31:0] ca_data, nxt_ca_data;
reg [12:0] wc_addr, nxt_wc_addr;
reg [mem_asz-1:0] wc_addr, nxt_wc_addr;
reg [31:0] wc_data, nxt_wc_data;
reg cvld, nxt_cvld;
reg wcvld, nxt_wcvld;
80,54 → 81,51
reg a_rip, nxt_a_rip; // read in progress by A
reg a_wip, nxt_a_wip; // write (read-cache-fill) in progress by A
reg b_rip, nxt_b_rip; // read in progress by B
wire t_ram_nwrt, t_ram_nce;
wire [35:0] t_ram_din;
wire c_rip = cfgi_trdy;
wire c_rip = cfgi_trdy;
wire a_cache_hit, b_cache_hit;
wire [12:0] t_ram_addr;
 
/*AUTOWIRE*/
// Beginning of automatic wires (for undeclared instantiated-module outputs)
wire [31:0] d_out; // From mem of behave1p_mem.v
// End of automatics
 
/* -----\/----- EXCLUDED -----\/-----
assign #1 t_ram_nwrt = ram_nwrt;
assign #1 t_ram_nce = ram_nce;
assign #1 t_ram_addr = ram_addr;
assign #1 t_ram_din = ram_din;
-----/\----- EXCLUDED -----/\----- */
 
assign lcfg_data_rd_data = dout;
assign cfgi_rd_data = dout;
assign b_rdata = dout;
 
assign a_cache_hit = cvld & (ca_addr == a_addr[14:2]);
assign b_cache_hit = wcvld & (wc_addr == a_addr[14:2]);
assign a_cache_hit = cvld & (ca_addr == a_addr[mem_asz+1:2]);
assign b_cache_hit = wcvld & (wc_addr == a_addr[mem_asz+1:2]);
/* behave1p_mem AUTO_TEMPLATE
(
// Outputs
.rd_data (dout),
.d_out (dout),
// Inputs
.wr_en (!t_ram_nce & !t_ram_nwrt),
.rd_en (!t_ram_nce & t_ram_nwrt),
.clk (clk),
.d_in (t_ram_din[]),
.addr (t_ram_addr[]),
.wr_en (!ram_nce & !ram_nwrt),
.rd_en (!ram_nce & ram_nwrt),
.clk (clk),
.d_in (ram_din[]),
.addr (ram_addr[]),
);
*/
 
behave1p_mem #(.width(32),
.depth (8192),
.addr_sz (13)) mem
.depth (mem_depth),
.addr_sz (mem_asz)) mem
(/*AUTOINST*/
// Outputs
.d_out (d_out[31:0]),
.d_out (dout), // Templated
// Inputs
.wr_en (!t_ram_nce & !t_ram_nwrt), // Templated
.rd_en (!t_ram_nce & t_ram_nwrt), // Templated
.wr_en (!ram_nce & !ram_nwrt), // Templated
.rd_en (!ram_nce & ram_nwrt), // Templated
.clk (clk), // Templated
.d_in (t_ram_din[31:0]), // Templated
.addr (t_ram_addr[12:0])); // Templated
.d_in (ram_din[31:0]), // Templated
.addr (ram_addr[(mem_asz)-1:0])); // Templated
always @*
begin
135,7 → 133,7
ram_nwrt = 1;
ram_nce = 1;
ram_din = 32'h0;
ram_addr = a_addr[14:2];
ram_addr = a_addr[mem_asz+1:2];
a_wait_n = 1;
b_wait_n = 1;
nxt_a_prio = a_prio;
203,13 → 201,13
a_wait_n = 0;
if (a_rip)
begin
nxt_ca_addr = a_addr[14:2];
nxt_ca_addr = a_addr[mem_asz+1:2];
nxt_ca_data = dout;
nxt_cvld = 1;
end
else if (a_prio | b_mreq_n)
begin
ram_addr = a_addr[14:2];
ram_addr = a_addr[mem_asz+1:2];
nxt_a_prio = 0;
ram_nce = 0;
nxt_a_rip = 1;
247,7 → 245,7
begin
a_wait_n = 0;
nxt_wc_data = dout;
nxt_wc_addr = a_addr[14:2];
nxt_wc_addr = a_addr[mem_asz+1:2];
nxt_wcvld = 1;
end
 
271,7 → 269,7
else if (a_prio | b_mreq_n)
begin
a_wait_n = 0;
ram_addr = a_addr[14:2];
ram_addr = a_addr[mem_asz+1:2];
nxt_a_prio = 0;
ram_nce = 0;
nxt_a_rip = 1;
344,7 → 342,7
nxt_cfgi_trdy = 1;
ram_nce = 0;
ram_nwrt = 0;
ram_addr = cfgi_addr;
ram_addr = cfgi_addr[mem_asz-1:0];
ram_din = cfgi_wr_data;
// invalidate caches as precaution
nxt_cvld = 0;
353,7 → 351,7
else if (!cfgi_write & !cfgi_trdy)
begin
ram_nce = 0;
ram_addr = cfgi_addr;
ram_addr = cfgi_addr[mem_asz-1:0];
nxt_cfgi_trdy = 1;
end
end
375,7 → 373,7
b_rip <= 1'h0;
ca_data <= 32'h0;
cfgi_trdy <= 1'h0;
wc_addr <= 13'h0;
wc_addr <= {mem_asz{1'b0}};
wc_data <= 32'h0;
wcvld <= 1'h0;
// End of automatics
/rtl/app_localcfg/lcfg_cfgo_driver.v
74,7 → 74,7
nxt_chold = chold;
nxt_state = state;
case (1'b1)
case (1'b1) /* verilator lint_off CASEINCOMPLETE */
state[s_idle] :
begin
case (wr_stb)
109,10 → 109,23
begin
nxt_state = 1 << s_idle;
end
endcase // case (1'b1)
endcase // verilator lint_on CASEINCOMPLETE
end // always @ *
 
always @(posedge clk or negedge reset_n)
begin
if (~reset_n)
begin
state <= 1 << s_idle;
chold <= 0;
end
else
begin
state <= nxt_state;
chold <= nxt_chold;
end
end
/* lcfg_cfgo_regs AUTO_TEMPLATE
(
.rf_trdy (cfgo_wait_n),
125,6 → 138,7
.cfg_data2_rd_data (chold[23:16]),
.cfg_data3_rd_data (chold[31:24]),
.cfg_data0_rd_ack (state[s_ack]),
.cfg_status ({4'h0, state}),
.cfg_data[1-3]_rd_ack (1'b1),
.cfg_data[0-3]_wr_ack (state[s_idle]),
.cfg_data\([0-3]\)_wr_stb (wr_stb[\1]),
170,5 → 184,5
.cfg_data3_rd_data (chold[31:24]), // Templated
.cfg_data3_rd_ack (1'b1), // Templated
.cfg_data3_wr_ack (state[s_idle]), // Templated
.cfg_status ({4'h0,state})); // Templated
endmodule
.cfg_status ({4'h0, state})); // Templated
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.