verilog期末编程题
时间: 2025-01-12 14:36:34 浏览: 45
### Verilog期末编程题目及练习
#### 题目1:设计一个四位二进制计数器
该模块应具有同步清零功能和使能控制。当`rst_n`为低电平时,计数值重置为0;当`en`为高电平且`clk`上升沿到来时,计数值加1。
```verilog
module counter_4bit (
input clk,
input rst_n,
input en,
output reg [3:0] q
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
q <= 4'b0;
else if (en)
q <= q + 1;
end
endmodule
```
此代码展示了如何创建一个简单的四位二进制计数器[^1]。
#### 题目2:构建带有异步复位的8位全加法器
要求能够处理两个8位输入以及来自低位的进位输入,并提供结果输出与向高位传递的新进位信号。
```verilog
module adder_8bit_async_reset(
input wire clk,
input wire rst_n,
input wire cin,
input wire [7:0] a,
input wire [7:0] b,
output reg [7:0] sum,
output reg cout
);
// 异步复位逻辑
always_ff @(posedge clk, negedge rst_n) begin : proc_sum_cout
if (~rst_n) begin
sum <= 'b0;
cout <= 1'b0;
end else begin
{cout,sum} = a + b + cin;
end
end
endmodule
```
上述代码实现了带异步复位特性的八位全加法器的设计[^3]。
#### 题目3:实现状态机来控制LED灯闪烁模式
通过有限状态机(FSM),根据不同的按键输入改变LED灯的状态(熄灭、常亮、慢闪、快闪)。每种状态下保持一定时间后再切换到下一个状态。
```verilog
module led_fsm(
input wire clk,
input wire btn,
output reg led_on
);
typedef enum logic [1:0] {
OFF = 2'd0,
ON = 2'd1,
SLOW_BLINK = 2'd2,
FAST_BLINK = 2'd3
} state_t;
state_t current_state, next_state;
parameter CLK_FREQ_HZ = 50_000_000; // 假设系统频率为50MHz
localparam TIME_SLOW_MS = 500;
localparam TIME_FAST_MS = 100;
reg [$clog2(CLK_FREQ_HZ * TIME_SLOW_MS / 1000)-1:0] slow_counter;
reg [$clog2(CLK_FREQ_HZ * TIME_FAST_MS / 1000)-1:0] fast_counter;
always_ff @(posedge clk) begin
case(current_state)
OFF: led_on <= 1'b0;
ON: led_on <= 1'b1;
SLOW_BLINK: begin
if(slow_counter >= $unsigned((CLK_FREQ_HZ * TIME_SLOW_MS)/1000)) begin
slow_counter <= 0;
led_on <= ~led_on;
end else begin
slow_counter <= slow_counter + 1;
end
end
FAST_BLINK: begin
if(fast_counter >= $unsigned((CLK_FREQ_HZ * TIME_FAST_MS)/1000)) begin
fast_counter <= 0;
led_on <= ~led_on;
end else begin
fast_counter <= fast_counter + 1;
end
end
endcase
if(btn) begin
unique case(current_state)
OFF: next_state <= ON;
ON: next_state <= SLOW_BLINK;
SLOW_BLINK:next_state <= FAST_BLINK;
FAST_BLINK:next_state <= OFF;
endcase
end else begin
next_state <= current_state;
end
current_state <= next_state;
end
endmodule
```
这段程序定义了一个用于控制LED灯光效果的状态机结构[^2]。
阅读全文
相关推荐
















