mirror of
https://github.com/aolofsson/oh.git
synced 2025-02-07 06:44:09 +08:00
Enable 2 clock operation for EMMU
The dual port memory should support this in most cases
This commit is contained in:
parent
47a143eada
commit
5470c1dc8f
@ -19,8 +19,8 @@ module emmu (/*AUTOARG*/
|
|||||||
// Outputs
|
// Outputs
|
||||||
mi_dout, emesh_access_out, emesh_packet_out, emesh_packet_hi_out,
|
mi_dout, emesh_access_out, emesh_packet_out, emesh_packet_hi_out,
|
||||||
// Inputs
|
// Inputs
|
||||||
reset, clk, mmu_en, mmu_bp, mi_en, mi_we, mi_addr, mi_din,
|
reset, rd_clk, wr_clk, mmu_en, mmu_bp, mi_en, mi_we, mi_addr,
|
||||||
emesh_access_in, emesh_packet_in, emesh_wait_in
|
mi_din, emesh_access_in, emesh_packet_in, emesh_wait_in
|
||||||
);
|
);
|
||||||
parameter DW = 32; //data width
|
parameter DW = 32; //data width
|
||||||
parameter AW = 32; //address width
|
parameter AW = 32; //address width
|
||||||
@ -34,7 +34,8 @@ module emmu (/*AUTOARG*/
|
|||||||
/*DATAPATH CLOCk */
|
/*DATAPATH CLOCk */
|
||||||
/*****************************/
|
/*****************************/
|
||||||
input reset;
|
input reset;
|
||||||
input clk;
|
input rd_clk;
|
||||||
|
input wr_clk;
|
||||||
|
|
||||||
/*****************************/
|
/*****************************/
|
||||||
/*MMU LOOKUP DATA */
|
/*MMU LOOKUP DATA */
|
||||||
@ -92,6 +93,9 @@ module emmu (/*AUTOARG*/
|
|||||||
//write data
|
//write data
|
||||||
assign mi_wr_data[63:0] = {mi_din[31:0], mi_din[31:0]};
|
assign mi_wr_data[63:0] = {mi_din[31:0], mi_din[31:0]};
|
||||||
|
|
||||||
|
//todo: implement readback? worth it?
|
||||||
|
assign mi_dout[DW-1:0] = 'b0;
|
||||||
|
|
||||||
/*****************************/
|
/*****************************/
|
||||||
/*MMU READ LOGIC */
|
/*MMU READ LOGIC */
|
||||||
/*****************************/
|
/*****************************/
|
||||||
@ -103,11 +107,11 @@ module emmu (/*AUTOARG*/
|
|||||||
// Outputs
|
// Outputs
|
||||||
.rd_data (emmu_lookup_data[MW-1:0]),
|
.rd_data (emmu_lookup_data[MW-1:0]),
|
||||||
// Inputs
|
// Inputs
|
||||||
.wr_clk (clk),
|
.wr_clk (wr_clk),
|
||||||
.wr_en (mi_wr_vec[5:0]),
|
.wr_en (mi_wr_vec[5:0]),
|
||||||
.wr_addr (mi_addr[14:3]),
|
.wr_addr (mi_addr[14:3]),
|
||||||
.wr_data (mi_wr_data[MW-1:0]),
|
.wr_data (mi_wr_data[MW-1:0]),
|
||||||
.rd_clk (clk),
|
.rd_clk (rd_clk),
|
||||||
.rd_en (emesh_access_in),
|
.rd_en (emesh_access_in),
|
||||||
.rd_addr (emmu_rd_addr[MAW-1:0])
|
.rd_addr (emmu_rd_addr[MAW-1:0])
|
||||||
);
|
);
|
||||||
@ -118,13 +122,13 @@ module emmu (/*AUTOARG*/
|
|||||||
//pipeline to compensate for table lookup pipeline
|
//pipeline to compensate for table lookup pipeline
|
||||||
//assumes one cycle memory access!
|
//assumes one cycle memory access!
|
||||||
|
|
||||||
always @ (posedge clk or posedge reset)
|
always @ (posedge rd_clk or posedge reset)
|
||||||
if(reset)
|
if(reset)
|
||||||
emesh_access_out <= 1'b0;
|
emesh_access_out <= 1'b0;
|
||||||
else if(~emesh_wait_in)
|
else if(~emesh_wait_in)
|
||||||
emesh_access_out <= emesh_access_in;
|
emesh_access_out <= emesh_access_in;
|
||||||
|
|
||||||
always @ (posedge clk)
|
always @ (posedge rd_clk)
|
||||||
if(emesh_access_in & ~emesh_wait_in)
|
if(emesh_access_in & ~emesh_wait_in)
|
||||||
emesh_packet_reg[PW-1:0] <= emesh_packet_in[PW-1:0];
|
emesh_packet_reg[PW-1:0] <= emesh_packet_in[PW-1:0];
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user