打印

verilog assign 用法问题

[复制链接]
1338|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bamboo1986|  楼主 | 2014-8-4 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触verilog
请教一个问题。

由其他控制线产生的一个标志flag==1

assign IO = (flag==1)?
            IO1
            :IO2

我希望当产生标志时将IO1赋值给IO只操作一次。所以需要将flag清零。

类似如下C程序。  
if(flag==1)
{
  flag=0;
  IO=IO1
}
else
{
  IO=IO2
}

请问verilog中怎样实现?

相关帖子

沙发
bamboo1986|  楼主 | 2014-8-5 10:45 | 只看该作者
是问题太简单,大家都不屑吗?

使用特权

评论回复
板凳
zhuo811| | 2014-8-6 21:43 | 只看该作者
flag应该是寄存器形式,你写的都是阻塞语句,应该按照时钟,来判断,用非阻塞语句编写。

使用特权

评论回复
地板
nethopper| | 2014-8-6 21:53 | 只看该作者
Flag的置位用的是哪个时钟驱动,复位也应该用那个时钟驱动。

使用特权

评论回复
5
llf021421| | 2014-8-7 19:55 | 只看该作者
本帖最后由 llf021421 于 2014-8-7 22:38 编辑

参考代码如下:
reg flag_reg;
reg flag_reg_next;
//下面是一个D触发器
always @(posedge sysclk,negedge rst)
begin
  if(!rst)
    flag_reg <= 0;
  else
    flag_reg <= flag_reg_next;
end

//下面是D触发器组合逻辑输入电路
always @(*)
begin
  if(flag_reg == 1)
      flag_reg_next = 0;
  else
      flag_reg_next = flag_reg;
  end


//下面是D触发器的组合逻辑输出电路
always @(*)
begin
    if(flag_reg == 1)
       IO = IO1;
   else
      IO = IO2;
end



















使用特权

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

本版积分规则

8

主题

182

帖子

2

粉丝