牛客网Verilog刷题——VL40
- 题目
- 答案
题目
设计一个同时输出7分频的时钟分频器,占空比要求为50%。注意rst为低电平复位。
信号示意图如下:
波形示意图如下。
输入输出描述:
信号 | 类型 | 输入/输出 | 位宽 | 描述 |
---|---|---|---|---|
clk_in | wire | Intput | 1 | 系统时钟信号 |
rst | wire | Intput | 1 | 异步复位信号,低电平有效 |
clk_out7 | wire | Output | 1 | 分频时钟 |
答案
`timescale 1ns/1ns
module odo_div_or
(
input wire rst ,
input wire clk_in,
output wire clk_out7
);
//*************code***********//
reg [2:0] cnt1;
reg [2:0] cnt2;
reg clk1;
reg clk2;
always @(posedge clk_in or negedge rst)
if(!rst)
cnt1 <= 'd0;
else if(cnt1 == 'd6)
cnt1 <= 'd0;
else
cnt1 <= cnt1 + 1'd1;
always @(posedge clk_in or negedge rst)
if(!rst)
clk1 <= 1'b0;
else if(cnt1 == 'd3 || cnt1 == 'd6)
clk1 <= ~clk1;
else
clk1 <= clk1;
always @(negedge clk_in or negedge rst)
if(!rst)
cnt2 <= 'd0;
else if(cnt2 == 'd6)
cnt2 <= 'd0;
else
cnt2 <= cnt2 + 1'd1;
always @(negedge clk_in or negedge rst)
if(!rst)
clk2 <= 1'b0;
else if(cnt2 == 'd3 || cnt2 == 'd6)
clk2 <= ~clk2;
else
clk2 <= clk2;
assign clk_out7 = clk1 | clk2;
//*************code***********//
endmodule