|
本帖最后由 zouyf12 于 2012-10-18 16:28 编辑
代码如下, 要实现的功能是, CLK持续的输入时钟信号, 当CS为低电平时,9个位的寄存器DataBuff把之前存的数据从高到低依次从最高位 DataBuff[8] 输出,最低位补0, 当CS为高时,DataBuff赋一个值,(程序中为217, 既 11011001)
现在的问题是,用一个单片机根据时序读出FPGA里面的值时, 却是 217 (11011001) 和178 (10110010)交替出现,可用MODELSIM仿真是没有问题的,
经过一系列的实验发现,当移位输出‘1’时,比如来4个CLK上升沿后, DataBuff[8] = ‘1’ , 这个时候,在CLK不变化的情况下,拉高CS, 再由CLK来一个上升沿,让DataBuff赋初值217时,问题就来了, 这时DataBuff并没有等于217(及9‘b011011001) 而是等于434(及9’b 110110010), 往前挪了一位,所以就导致下一次读出时,最高位的1被直接移出丢弃。 而当移位输出为‘0’时, 就没有这种情况, 真是很奇怪呀, 求高手指点个方向。
module TOP(
CS,
CLK,
DO,
);
input CS, CLK;
output DO;
reg [8:0]DataBuff;
parameter Verion = 9'd217;
assign DO = DataBuff[8];
always@(posedge CLK)
begin
if(CS == 1'b1)
DataBuff <= Verion;
else
begin
DataBuff <= {DataBuff[7:0], 1'b0};
end
end
endmodule
修改加上波形 RTL图,也没有看出什么问题。 波形图注意红色框位置,当CS为1, DO为1时, 只要CLK一个上升沿,DO就会变0, 而实际运行却不是这样,DO仍然为1 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|