打印

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

[复制链接]
2103|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多位都可以的

使用特权

评论回复
5
yrisking|  楼主 | 2010-9-19 17:29 | 只看该作者
EN只相当于一个使能信号,我本是想在EN为低时,把值赋到CMDX_R里,然后但EN为高时,在移位送出去.

使用特权

评论回复
6
xilinxer| | 2010-9-20 16:02 | 只看该作者
那你把敏感变量表里的EN去掉!应该就可以了!
然后你那是不是需要加一个复位信号,复位信号不加也可以.

使用特权

评论回复
7
yrisking|  楼主 | 2010-9-21 09:24 | 只看该作者
6楼你好,你的方法之前我就试过了,仿真效果貌似更糟糕

使用特权

评论回复
8
andyany| | 2010-9-21 11:31 | 只看该作者
把你的仿真波形贴出来看看。

使用特权

评论回复
9
sxhhhjicbb| | 2010-10-16 23:02 | 只看该作者
仿真的时候sel有没有被正确赋值?程序代码是对的。

使用特权

评论回复
10
sxhhhjicbb| | 2010-10-17 00:44 | 只看该作者
用modelsim仿真了一把。CMDX_R像是被优化了。把这个信号引出来。可以发现它是被赋值了的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

17

帖子

1

粉丝