1.
时序电路下实现一个带有高电平同步复位信号(复位到0)的4-bit counter, 触发器应由 clk 的上升沿触发,每个时钟的上升沿,计数器加1,加到15之后,再加1计数器回0。
module top_module (
input clk,
input reset,
output reg [3:0] q
);
endmodule
2.
时序电路下实现一个带有高电平同步复位信号(复位到0),从 0 到 9 计数的十进制计数器(4-bit counter),加到9之后,再加1时,计数器回0,循环往复。计数器并不是总是在每个时钟周期递增,当en信号为高时,计数器才能在时钟上升沿增加1。
module top_module (
input clk,
input en,
input reset,
output reg [3:0] q);
endmodule
3.
时序电路下实现一个高电平异步复位信号(复位到0)的4-bit的移位寄存器(右移)。要点如下:
- areset:高电平异步复位信号
- load:高电平时将data赋值给移位寄存器
- ena:高电平时开始向右移位,并在最左边填入0。
- q:4-bit 移位寄存器
- 注意:load的优先级高于ena
module top_module(
input clk,
input areset,
input load,
input ena,
input [3:0] data,
output reg [3:0] q
);
endmodule
4.
时序电路下实现循环移动(rotate)99-bit寄存器,即可以向左也可以向右循环移动。循环移动不丢失寄存器的任意位。要点如下:
- load:高电平时将data赋值给移位寄存器
- q:99-bit 循环移动寄存器
- ena[1:0]控制循环移动的方向:
- 2’b01:每次向右循环移动1-bit
- 2’b10:每次向左循环移动1-bit
- 2’b00或2’b11不做任何操作
- 注意:load优先级高于ena
module top_module(
input clk,
input load,
input [1:0] ena,
input [99:0] data,
output reg [99:0] q
);
endmodule
5.
在问题3中右移位过程中高位补0也叫做逻辑右移(logical shift right),对于算术右移(arithmetic shift right)来说,高位应该补充符号位。在时序电路下实现一个64-bit的算术移位寄存器。要点如下:
- load:高电平时将data赋值给移位寄存器
- ena:选择是否需要移位
- q:64-bit移位寄存器
- amount:选择算术移位方向和位数:
- 2’b00:左移1-bit
- 2’b01:左移8-bit
- 2’b10:右移1-bit
- 2’b11:右移8-bit
module top_module(
input clk,
input load,
input ena,
input [1:0] amount,
input [63:0] data,
output reg [63:0] q
);
endmodule
参考代码:
[content_control]
[/content_control]
6.
实现线性反馈移位寄存器(LFSR, Linear Feedback Shift Register)。LFSR是在移位寄存器的基础上添加了一些XOR门。这些添加XOR门,影响下一个状态的bit位叫做抽头(tap),如下图所示,tap在5和3(注意tap的位置一般从1开始)。这里bit 5虽然有tap,但是XOR门其中的一个输入是0(也就相当于没有XOR门)。代码实现要点如下:
- reset:高电平同步复位信号,将q复位到5’h1
- 注意q[4:0]是5-bit移位寄存器(不是q[5:1])

module top_module(
input clk,
input reset,
output reg [4:0] q
);
endmodule
参考代码:
[content_control]
[/content_control]
7.
实现带有多路复用器(MUX)的LFSR,如下图所示:注意代码中提供的r和Q是[2:0],图中画的是从低位到高位。

module top_module (
input [2:0] r,
input L,
input clk,
output reg [2:0] Q
);
endmodule
参考代码:
[content_control]
[/content_control]
8.
在问题6的基础上,实现一个在位置 32、22、2 和 1 有tap的32-bit LFSR。
module top_module(
input clk,
input reset, // 高电平同步复位,将q复位到32'h1
output reg [31:0] q
);
endmodule
参考代码:
[content_control]
[/content_control]
9.
实现下图所示移位寄存器。注意resetn是低电平同步复位信号。

module top_module (
input clk,
input resetn,
input in,
output out
);
endmodule
参考代码:
[content_control]
[/content_control]
10.
实现一个3-1 查找表,要点如下:
- 模块内有一个8-bit寄存器Q [7:0],在enable信号为高的时候,不断左移,输入S补充空出来的位(低位不是补0)。
- 输入A,B,C选择Q对应的索引,比如输入A,B,C分别为1,0,1,那么对应输出的Z应该为Q[3’b101] = Q[5]
module top_module (
input clk,
input enable,
input S,
input A, B, C,
output Z
);
endmodule
参考代码:
[content_control]
[/content_control]
对应视频: