总是不能够正确赋值,请高手帮忙

[复制链接]
3452|9
 楼主| yrisking 发表于 2010-9-19 10:12 | 显示全部楼层 |阅读模式
小第写了一段代码,但是用QUARTUS II仿真出来,总是不能够对其中的CMDX_R寄存器正确赋值,请高手们帮忙看看,有问题请告诉我,谢谢大家.代码如下:
module sd_cmd(sel,en,clk,cmd,cmd_right);
input[3:0] sel;
input en;
input clk;
output cmd;
output cmd_right;
reg[5:0] num;
reg cmd_r;
reg[47:0] cmdx_r;
reg cmd_right_r;

always @ (negedge clk or negedge en)
begin
  if(!en)
   begin
     num <= 6'd0;
     cmd_right_r <= 1'b0;
     cmd_r <= 1'b1;
     case(sel)
      4'b0000:cmdx_r = 48'h400000000095;
      4'b0001:cmdx_r = 48'h7700000000ff;
      4'b0010:cmdx_r = 48'h6900000000ff;
      4'b0011:cmdx_r = 48'h5100000000ff;
      default:;
    endcase
  end
  else begin
  num <= num+1'b1;
  if(num <= 6'd47)
  begin
    cmd_r <= cmdx_r[47-num];
    cmd_right_r <= 1'b0;
  end
  else  begin
    num <= 6'd0;
    cmd_right_r <= 1'b1;
    cmd_r <= 1'b1;
     end
    end
end
assign cmd = cmd_r;
assign cmd_right = cmd_right_r;
endmodule
xilinxer 发表于 2010-9-19 14:31 | 显示全部楼层
你的EN好像是复位信号.
怎么在里面还有case语句呢?
你的写法肯定不正确!
andyany 发表于 2010-9-19 15:41 | 显示全部楼层
reg[47:0] cmdx_r;
位数超过32位,不行吧?
 楼主| yrisking 发表于 2010-9-19 17:28 | 显示全部楼层
可以的吧,我们有到100多位都可以的
 楼主| yrisking 发表于 2010-9-19 17:29 | 显示全部楼层
EN只相当于一个使能信号,我本是想在EN为低时,把值赋到CMDX_R里,然后但EN为高时,在移位送出去.
xilinxer 发表于 2010-9-20 16:02 | 显示全部楼层
那你把敏感变量表里的EN去掉!应该就可以了!
然后你那是不是需要加一个复位信号,复位信号不加也可以.
 楼主| yrisking 发表于 2010-9-21 09:24 | 显示全部楼层
6楼你好,你的方法之前我就试过了,仿真效果貌似更糟糕
andyany 发表于 2010-9-21 11:31 | 显示全部楼层
把你的仿真波形贴出来看看。
sxhhhjicbb 发表于 2010-10-16 23:02 | 显示全部楼层
仿真的时候sel有没有被正确赋值?程序代码是对的。
sxhhhjicbb 发表于 2010-10-17 00:44 | 显示全部楼层
用modelsim仿真了一把。CMDX_R像是被优化了。把这个信号引出来。可以发现它是被赋值了的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

17

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部