verilog写的三分频

笔试的时候有一道题目要求设计三分频电路,晕,想了半天想不出来,回到宿舍里才动手写了出来,如下:

其实3分频电路有很多种方法,这里选用其中一种:先求出两个占空比为1/3的频率波形,注意分别为上升沿触发和下降沿触发,最后两个信号波形进行或运算,代码如下:

module san(
 input clk,
 input rst,
 output clk_3
);

reg [1:0]cnt;
reg [1:0]cnt1;
reg clk1;
reg clk2;

always@(posedge clk or negedge rst)
if(!rst)  begin cnt<=2'b00;end
else if(cnt==2'b10) cnt<=2'b00;
else cnt<=cnt+2'b01;

always@(negedge clk or negedge rst)
if(!rst) begin cnt1<=2'd0;end
else if(cnt1==2'b10) cnt1<=2'b00;
else cnt1<=cnt1+2'b01;

always@(posedge clk or negedge rst)
if(!rst) clk1<=1'b1;
else if(cnt==2'b00||cnt==2'b10) clk1=~clk1;
else clk1<=clk1;

always@(negedge clk or negedge rst)
if(!rst)  clk2<=1'b1;
else if(cnt1==2'b00||cnt1==2'b10) clk2<=~clk2;
else clk2<=clk2;


assign clk_3=clk1|clk2;
endmodule

 

功能仿真波形图:

verilog写的三分频_第1张图片

 

时序仿真波形图:

verilog写的三分频_第2张图片

 

写程序的时候有些需要注意的地方:1、不要在不同的always块中对同一个变量进行赋值操作;

                                                                2、注意在哪个计数器状态进行时钟的翻转。

你可能感兴趣的:(FPGA)