【HDLBits刷题】Dff8ar..

60 篇文章 17 订阅
20 篇文章 4 订阅

Create 8 D flip-flops with active high asynchronous reset. All DFFs should be triggered by the positive edge of clk.

要求创建一个异步清零端的D触发器

module top_module (
    input clk,
    input areset,   // active high asynchronous reset
    input [7:0] d,
    output [7:0] q
);
    always @(posedge clk or posedge areset)begin
        if(areset)
            q <= 8'd0;
        else
            q <= d;
    end
endmodule

这题会有下面这种错误,但是我自己不是很能理解:

module top_module (
    input clk,
    input areset,   // active high asynchronous reset
    input [7:0] d,
    output [7:0] q
);
    always @(posedge clk or posedge areset)begin
        if(!areset)
            q <= d;
        else
            q <= 8'd0;
    end
endmodule

会报错:

cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct

这里我只能发表一下自己的观点(此观点有待验证):

1、这里的代码描述的是一个时序逻辑电路,敏感信息表里面有posedge clk 和 posedge areset两个信号。但是我们知道模块的边沿敏感时钟信号只能有一个,那么如何区分哪一个是时钟信号?规定是这样的:我们把clk作为时钟信号,那么在always过程语句里面就不可以出现clk这个信号了,上面的代码可以看出来,clk是时钟信号;

2、那么剩下的posedge areset怎么说呢?用always描述的时序电路中,除了时钟信号之外,其他信号敏感事件列表的信号需要在过程语句里面进行说明(always结构中如果带if语句的需要说明,不带if语句也可不说明),就是必须把areset放到if()里面,如此题的 if(areset) ;

3、放在if里面还要注意一件事情,就是如果敏感事件列表里面写的是posedge areset,那么if里面的if(areset)必须是1;如果是nagedge areset,那么if里面就必须是if(!areset),必须是0。所以上面之所以报错,就是因为本题的敏感事件列表里面事posedge areset,if里面的条件语句必须是和上升沿posedge对应的1,不然就会报错。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值