这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 两个always模块对一个变量进行赋值

共13条 1/2 1 2 跳转至

两个always模块对一个变量进行赋值

助工
2009-05-06 14:49:30     打赏

有个计数器
reg [5:0]count=0;
现在需要用a信号对它清零,b信号对对它进行累加。
always @(posedge a)
count<=0;

always @(posedge b)
  count=count+1;
 
出错了,两个或两个以上always块里面对同一个变量进行赋值,应该怎么解决呢?




关键词: 两个     always     模块     一个     变量     进行     赋值    

助工
2009-05-06 15:17:55     打赏
2楼
貌似只能使用2个always语句进行赋值啊

助工
2009-05-06 15:24:45     打赏
3楼
             用这样实现和上面有什么区别吗?
                       always@(posedge a or posedge b)
                                          if (a)
                                               count<=0;
                                   else if(b) 
                                              count<=count+1;

助工
2009-05-06 15:42:52     打赏
4楼
下面的做法,存在优先级的问题,另外,还可能产生竞争的现象 具体怎样才能避免这些问题,以前想过,但没做出来

助工
2009-05-06 15:45:58     打赏
5楼
看看Jason_zhang 有什么好方法吧.............

助工
2009-05-06 16:30:13     打赏
6楼

貌似可以了,不过现在出现了个新问题
reg st=0;  //开始信号寄存器
always @(posedge p or posedge z)
begin
 if (z==1)    //第一个Z脉冲z脉冲出现才计数
  begin
  count<=0;
  st<=1;
  end
 
  else
  begin
  if (st==1) //判断是否已经出现Z脉冲
   begin
   count<=count+1;
   if (count==10|count==30)  //如果每周计数到10和30个脉冲就发出一个脉冲信号
    CLK<=1;
    else  CLK<=0;
   end
  else CLK<=0;
  end
end

问题是,仿真的时候,并没有等到第一个Z脉冲出现就已经开始计数了。这是为什么呢?


高工
2009-05-06 18:28:50     打赏
7楼
你的意思是:b作为计数器时钟,上升沿有效;a作为清零是能,高电平有效。
一个变量只能在一个进程中被赋值。

推荐的写法为:

always @ ( posedge b)
begin
      if (a)
          count <= 0;
     else
         count <= count + 1;
end

这是同步清零方式,能消除竞争冒险,且符合同步设计思想,便于仿真器穿透。但a高电平必须持续一个b周期以上。


另一种写法为:
always @ ( posedge b or posedge a )
begin
      if (a)
          count <= 0;
     else
         count <= count + 1;
end
这是异步清零方式,不推荐。

高工
2009-05-06 18:39:03     打赏
8楼

你用的是哪个仿真软件?这种写法从仿真语义上看应该是可以的,除了
if  (count==10|count==30)  中的 “|” 应改成 “||”

但这种写法不好。
1, “reg st=0; ”,这个初值仅在仿真时有效,综合是无效,因此综合后st的初值是随机的,应该有一个全局的复位信号对需要的全部寄存器赋初值,先复位再使用。
2, 你的CLK会综合一个不希望的锁存器,因为你在if (z==1) 中未对其赋值。


助工
2009-05-06 20:28:10     打赏
9楼
多谢Jason_Zhang指点!获益匪浅

高工
2009-05-06 23:12:48     打赏
10楼
不必客气。大家一起学习

共13条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]