kostanatuka
Newbie level 2

Hello!
Don't look at the scheme as it has to have a meaning! It's an assignment to practice what I've learned about verilog for the past week. The code as it is, is working and the test bench is showing the results that I expect. I'm looking for optimization suggestions. Any help will be appreciated!
Scheme:

Code:
valid module:
counter module:
shiftreg module:
mem driver module:
mem module:
Don't look at the scheme as it has to have a meaning! It's an assignment to practice what I've learned about verilog for the past week. The code as it is, is working and the test bench is showing the results that I expect. I'm looking for optimization suggestions. Any help will be appreciated!
Scheme:

Code:
valid module:
Code:
module valid(
button,
clk,
rstn,
valid_in
);
input button, clk, rstn;
output valid_in;
reg q1,q2;
assign valid_in = q1 & ~q2;
always @ (posedge clk or negedge rstn)
begin
if(!rstn)
begin
q1 <= 1'b0;
q2 <= 1'b0;
end
else
begin
q1 <= button;
q2 <= q1;
end
end
endmodule
counter module:
Code:
module counter8(
valid_in,
clk,
rstn,
valid1,
data_8,
stop
);
input valid_in, clk, rstn, stop;
output valid1, data_8;
wire [7:0] data_8;
reg [7:0] tmpdata_8;
reg valid1;
always @ (posedge clk or negedge rstn)
begin
if(!rstn)
begin
tmpdata_8 <= 8'b00000000;
valid1 <= 1'b0;
end
else
begin
valid1 <= valid_in & ~stop;
tmpdata_8 <= tmpdata_8 + 1'b1;
end
end
assign data_8 = tmpdata_8;
endmodule
shiftreg module:
Code:
module shiftreg(
clk,
rstn,
data_8,
valid1,
data_32,
valid_fifo
);
input valid1, clk, rstn;
input [7:0] data_8;
output wire [31:0] data_32;
output valid_fifo;
reg [31:0] tmp;
reg [1:0] fill;
reg [1:0] go;
assign valid_fifo = &go & fill[1] & ~fill[0];
always @ (posedge clk or negedge rstn)
if (!rstn)
fill <= 0;
else
fill <= go;
always @ (posedge clk or negedge rstn)
begin
if(!rstn)
begin
tmp <= 0;
go <= 4'b0;
end
else
if(valid1)
begin
tmp <= {tmp,data_8};
go <= go + 1'b1;
end
end
assign data_32 = tmp;
endmodule
mem driver module:
Code:
module mem_fifo(
clk,
rstn,
data_32,
data,
addr,
valid_fifo,
stop,
mem_full,
wr
);
input clk, rstn, valid_fifo;
input [31:0] data_32;
output stop, mem_full;
output reg [31:0] data;
output reg [6:0] addr;
output reg wr;
reg [2:0] rd_ptr, wr_ptr;
reg [31:0] mem [0:7];
reg [2:0] counter;
assign mem_full = (addr > 63) ? 1 : 0;
assign stop = mem_full;
always @ (posedge clk, negedge rstn)
begin
if(!rstn)
begin
rd_ptr <= 0;
wr_ptr <= 0;
counter <= 0;
addr <= 0;
data <= 0;
end
else if(counter!=7 && valid_fifo)
begin
mem[wr_ptr] <= data_32;
wr_ptr <= wr_ptr + 1;
counter <= counter + 1;
wr <= 0;
end
else if(counter!=0 && addr != 64 )
begin
data <= mem[rd_ptr];
rd_ptr <= rd_ptr + 1;
counter <= counter - 1;
addr <= addr + 1;
wr <= 1;
end
end
endmodule
mem module:
Code:
module mem(
data,
wr,
addr,
clk,
out
);
input wr,clk;
input [5:0] addr;
input [31:0] data;
output reg [31:0] out;
reg [31:0] mem[0:63];
always @ (posedge clk)
if (wr)
begin
mem[addr] <= data;
end
always @ (posedge clk)
if (!wr)
begin
out <= mem[addr];
end
endmodule