Алгоритм работы заключается в следующем:
По управляющему сигналу WR осуществляется запись в регистры на каждом такте задающей частоты значений DATA. Когда последний регистр будет записан убирается сигнал WR и в первую ячейку ставится флаг, 'hbbbb_bbbb. После этого через какое-то время поступит сигнал разрешения считывания RD, в этот момент необходимо на шину DATA подать значение из этой первой ячейки ('hbbbb_bbbb).
CODE
`timescale 1ns/10ps
module read_mem (
input wire WR,
input wire [10:0] ADRR_in,
inout wire [31:0] DATA_IO,
input wire RD,
input wire clk
);
reg [31:0] BUFF [0:15];
reg [7:0] cnt;
reg full_buff;
integer i0;
assign DATA_IO = RD ? BUFF[0] : 32'bz;
initial
begin
for (i0=0;i0<=15;i0=i0+1) begin
BUFF[i0]=32'b0;
end
cnt=0;
full_buff=0;
end
always@(posedge clk)
begin
if (~WR) begin
BUFF[ADRR_in]<=DATA_IO;
if (BUFF[0]==32'habcd_abcd) begin
cnt<=cnt+1'b1;
end
else begin
cnt<=1'b0;
end
end
if ((cnt==BUFF[1]+1)&&(BUFF[0]==32'habcd_abcd)) begin
full_buff<=1'b1;
BUFF[0]<=32'hbbbb_bbbb;
end
end//always posclk
always @(negedge WR ) begin
full_buff<=1'b0;
end//always full_buff
endmodule
module read_mem (
input wire WR,
input wire [10:0] ADRR_in,
inout wire [31:0] DATA_IO,
input wire RD,
input wire clk
);
reg [31:0] BUFF [0:15];
reg [7:0] cnt;
reg full_buff;
integer i0;
assign DATA_IO = RD ? BUFF[0] : 32'bz;
initial
begin
for (i0=0;i0<=15;i0=i0+1) begin
BUFF[i0]=32'b0;
end
cnt=0;
full_buff=0;
end
always@(posedge clk)
begin
if (~WR) begin
BUFF[ADRR_in]<=DATA_IO;
if (BUFF[0]==32'habcd_abcd) begin
cnt<=cnt+1'b1;
end
else begin
cnt<=1'b0;
end
end
if ((cnt==BUFF[1]+1)&&(BUFF[0]==32'habcd_abcd)) begin
full_buff<=1'b1;
BUFF[0]<=32'hbbbb_bbbb;
end
end//always posclk
always @(negedge WR ) begin
full_buff<=1'b0;
end//always full_buff
endmodule
Я правильно понимаю что в моменты когда отсутствует сигнал RD, DATA_IO устанавливается в Z состояние тем самым начинает работать на прием?
Не совсем понимаю как можно это промоделировать в моделсиме. Только если поставить вместо Z какой-нибудь другой сигнал. Но это ведь будет не тоже самое что должно идти по этой шине при работе.