#142. 异步复位的寄存器

    ID: 142 Type: Default 1000ms 256MiB

异步复位的寄存器

题目描述

在前面的例子中,复位信号只能在触发信号的触发边沿才能起作用,也就是说如果没有触发边沿就无法对电路复位,这大大限制了复位的功能,因此还有一种经常使用的复位方式,称为异步复位。

为了使复位信号不依赖于时钟边沿,则复位信号也应该放在always进程块的敏感变量列表中。复位信号高电平有效和低电平有效在编码时稍有不同,对于高电平有效的复位信号来说,可以写成如下形式:

always@(posedge clk or posedge reset)
begin
    if(reset) …
    else …
end

如果是低电平有效的复位信号,则应写成如下形式:

always@(posedge clk or negedge reset)
begin
    if(~reset) …
    else …
end

试创建Verilog模块,实现一个时钟上升沿触发的,支持高电平有效的异步复位功能的8bit寄存器,寄存器复位值为0。

输入格式

2个 1bit 位宽的信号 clk、areset 1个 8bit 位宽的信号 d

输出格式

1个 8bit 位宽的信号 q

示例代码

module top (
    input clk,
    input areset,   // active high asynchronous reset
    input [7:0] d,
    output reg [7:0] q
);
// Write your code here
endmodule