1
0
mirror of https://github.com/aolofsson/oh.git synced 2025-01-30 02:32:53 +08:00

Fixing memory model for emesh

- Moving random wait generator into module
- Fixing wait circuit
This commit is contained in:
Andreas Olofsson 2015-11-13 16:23:30 -05:00
parent 13c523e80c
commit c725f5cab6
2 changed files with 30 additions and 18 deletions

View File

@ -32,7 +32,6 @@ module ememory(/*AUTOARG*/
wire [63:0] dout; wire [63:0] dout;
wire en; wire en;
wire mem_rd; wire mem_rd;
wire mem_wr;
reg [7:0] wen; reg [7:0] wen;
//State //State
@ -54,7 +53,8 @@ module ememory(/*AUTOARG*/
wire [AW-1:0] srcaddr_in; wire [AW-1:0] srcaddr_in;
wire [DW-1:0] din_aligned; wire [DW-1:0] din_aligned;
wire [DW-1:0] dout_aligned; wire [DW-1:0] dout_aligned;
wire wait_random; //TODO: make random
packet2emesh #(.PW(PW)) packet2emesh #(.PW(PW))
p2e ( p2e (
.write_out (write_in), .write_out (write_in),
@ -67,13 +67,13 @@ module ememory(/*AUTOARG*/
); );
//Access-in //Access-in
assign mem_rd = (access_in & ~write_in & ~wait_in); assign en = access_in & ~wait_all & ~wait_all;
assign mem_wr = (access_in & write_in ); assign mem_rd = (access_in & ~write_in & ~wait_all);
assign en = mem_rd | mem_wr;
//Pushback Circuit (pass through problems?) //Pushback Circuit (pass through problems?)
assign wait_out = access_in & wait_in; assign wait_out = (access_in & wait_all);
//Address-in (shifted by three bits, 64 bit wide memory) //Address-in (shifted by three bits, 64 bit wide memory)
assign addr[MAW-1:0] = dstaddr_in[MAW+2:3]; assign addr[MAW-1:0] = dstaddr_in[MAW+2:3];
@ -128,21 +128,16 @@ module ememory(/*AUTOARG*/
always @ (posedge clk or negedge nreset) always @ (posedge clk or negedge nreset)
if(!nreset) if(!nreset)
access_out <=1'b0; access_out <=1'b0;
else if(~wait_in) else
access_out <= mem_rd;
//Other emesh signals "dataload"
always @ (posedge clk)
if(mem_rd & ~wait_in)
begin begin
access_out <= mem_rd;
write_out <= 1'b1; write_out <= 1'b1;
align_addr[2:0] <= dstaddr_in[2:0]; align_addr[2:0] <= dstaddr_in[2:0];
datamode_out[1:0] <= datamode_in[1:0]; datamode_out[1:0] <= datamode_in[1:0];
ctrlmode_out[4:0] <= ctrlmode_in[3:0]; ctrlmode_out[4:0] <= ctrlmode_in[3:0];
dstaddr_out[AW-1:0] <= srcaddr_in[AW-1:0]; dstaddr_out[AW-1:0] <= srcaddr_in[AW-1:0];
end end
//Data alignment for readback //Data alignment for readback
emesh_rdalign emesh_rdalign (// Outputs emesh_rdalign emesh_rdalign (// Outputs
.data_out (dout_aligned[DW-1:0]), .data_out (dout_aligned[DW-1:0]),
@ -173,12 +168,27 @@ module ememory(/*AUTOARG*/
) )
emesh_monitor (.dut_access (access_in & write_in), emesh_monitor (.dut_access (access_in & write_in),
.dut_packet (packet_in[PW-1:0]), .dut_packet (packet_in[PW-1:0]),
.wait_in (1'b0), .wait_in (wait_random),
/*AUTOINST*/ /*AUTOINST*/
// Inputs // Inputs
.clk (clk), .clk (clk),
.nreset (nreset), .nreset (nreset),
.coreid (coreid[IDW-1:0])); .coreid (coreid[IDW-1:0]));
//Access wait circuit
reg [7:0] wait_counter;
always @ (posedge clk or negedge nreset)
if(!nreset)
wait_counter[7:0] <= 'b0;
else
wait_counter[7:0] <= wait_counter+1'b1;
assign wait_random = (|wait_counter[4:0]);//(|wait_counter[3:0]);//1'b0;
assign wait_all = (wait_random | wait_in);
endmodule // emesh_memory endmodule // emesh_memory
// Local Variables: // Local Variables:

View File

@ -35,8 +35,10 @@ module emesh_monitor(/*AUTOARG*/
always @ (posedge clk or negedge nreset) always @ (posedge clk or negedge nreset)
if(nreset & dut_access & ~wait_in) if(nreset & dut_access & ~wait_in)
$fwrite(ftrace, "%h_%h_%h_%h\n",dut_packet[PW-1:72],dut_packet[71:40],dut_packet[39:8],dut_packet[7:0]); begin
$fwrite(ftrace, "%h_%h_%h_%h\n",dut_packet[PW-1:72],dut_packet[71:40],dut_packet[39:8],dut_packet[7:0]);
$display("%h_%h_%h_%h\n",dut_packet[PW-1:72],dut_packet[71:40],dut_packet[39:8],dut_packet[7:0]);
end
endmodule // dut_monitor endmodule // dut_monitor