|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
module My_Int(data_in,sink_val,q,source_val,clk,aclr);
input clk,aclr,sink_val;
input [1:0] data_in;
output [1:0] q;
output source_val;
wire [1:0] q;
reg source_val;
reg [1:0] data;
reg rden,wren;
reg [5:0] wraddress;
reg [5:0] rdaddress;
reg [5:0] countwr;
reg [1:0] state;
wire wrclock,rdclock;
parameter STATE1=2'b01;
parameter STATE2=2'b10;
assign wrclock=clk;
assign rdclock=~clk;
always @ (posedge clk or posedge aclr)
if(aclr)
begin
data<='d0;
rden<=0;
wren<=0;
source_val<=0;
wraddress<=6'd0;
rdaddress<=6'd0;
countwr<=6'd0;
state<=STATE1;
end
else
begin
case(state)
STATE1:
begin
if((rden==0)&&(sink_val))
begin
rden<=0;
wren<=1;
wraddress<=countwr;
data<=data_in;
countwr<=countwr+6'b00_0001;
state<=STATE1;
end
if((wraddress==63)&&(sink_val==0))
begin
wraddress<=0;
wren<=0;
rdaddress<=6'b00_0000;
rden<=1;
source_val<=1;
state<=STATE2;
end
end
STATE2:
begin
if(rdaddress<63)
begin
case (rdaddress)
56: rdaddress<=1;
57: rdaddress<=2;
58: rdaddress<=3;
59: rdaddress<=4;
60: rdaddress<=5;
61: rdaddress<=6;
62: rdaddress<=7;
default: rdaddress<=rdaddress + 6'b00_1000;
endcase
state<=STATE2;
end
else
begin
rden<=0;
source_val<=0;
state<=STATE1;
end
end
endcase
end
ram64 RAM64(.a(data),.aclr(aclr),.wren(wren),.wraddress(wraddress),
.rdaddress(rdaddress),.rden(rden),
.wrclock(wrclock),.rdclock(rdclock),.q(q));
endmodule
除了第1~8个数据不正确,其他都对。如果是顺序读出:0,1,2,。。。63数据输出正确。可是改变顺序读,前8个数据就不对了从第1个开始读了而不是从0开始。高手给指导一下。 |
|