FPGA面試題 實現奇數倍分頻,並且占空比為50

2021-10-09 02:02:20 字數 2239 閱讀 5455

使用計數器控制暫存器反轉,很容易實現奇數倍分頻,但是新增了占空比為50%這一限制條件的話,有些同學就會犯難,因為數位電路不存在小數,而奇數除以二卻是乙個小數,這導致占空比為50%無法實現。本文將通過**的方式詳細解答這個問題。

解這個題的思路非常簡單,就是通過計數器控制兩個暫存器實現兩個占空比小於50%的奇數倍分頻,但是這兩個暫存器的時鐘控制乙個是上公升沿觸發,乙個是下降沿觸發,這會導致生成兩個相位差為90度的時鐘。對這兩個時鐘進行或運算,就可以得出結果。

實現**

module divfrequency(

clk,

rst_n,

clk_out);

input clk;

input rst_n;

output clk_out;

parameter n =

3'd5;//n為變頻數,可以變換

wire clk_out;

reg clk_reg1;

reg clk_reg2;

reg [2

:0]div_cnt;

wire [2

:0]a;

wire [2

:0]b;

assign a = n>

>1;

//n>

>

1相當於除以2然後取整

assign b = n -

1'b1;

always@(posedge clk or negedge rst_n )

//計數器

if(!rst_n)

div_cnt <=0;

else

if(div_cnt =

= b)

div_cnt <=0;

else

div_cnt <= div_cnt+

1'b1;

always@(posedge clk or negedge rst_n )

//第乙個時鐘暫存器

if(!rst_n)

clk_reg1 <=0;

else

if(div_cnt ==0

) clk_reg1 <= ~clk_reg1;

else

if(div_cnt =

= a)

clk_reg1 <= ~clk_reg1;

always@(negedge clk or negedge rst_n )

//第二個時鐘暫存器

if(!rst_n)

clk_reg2 <=0;

else

if(div_cnt ==1

)//由於是下降沿觸發,而計數器是上公升沿觸發,故比第乙個時鐘多1

clk_reg2 <= ~clk_reg2;

else

if(div_cnt =

= a +

1'b1 )//同上

clk_reg2 <= ~clk_reg2;

assign clk_out = clk_reg1|clk_reg2;

endmodule

測試**

`define clock_period 20

`timescale 1ns/

1nsmodule divfrequency_tb;

reg clk;

reg rst_n;

wire clk_out;

initial

begin

clk =1;

end always #(`clock_period/

2) clk = ~clk;

divfrequency u0(

clk,

rst_n,

clk_out);

initial

begin

rst_n =1;

#(`clock_period)

rst_n =0;

#(`clock_period)

rst_n =1;

#(`clock_period*40)

$stop

;end

endmodule

modelsim**結果

FPGA實現任意奇數分頻

我們都知道用fpga做偶數分頻很簡單,只需要用計數器計數到分頻係數n的一半再減去1,不斷去翻轉分頻的訊號即可得到分頻的訊號,那麼奇數奇數分頻其實也是一樣的,但是如果要得到占空比為50 的訊號,那可能就需要處理一下才可以,下圖為占空比為50 的3分頻訊號產生原理。利用原始訊號的上公升沿產生乙個三分頻的...

面試題 並查集

n個數,分別是1 n,現把他們分堆並給出兩兩關係例如2 5 1 5,給出關係的兩個數必須在同一堆,問最大分堆數。建圖dfs或者並查集。沒有寫,先貼乙個模板上來。1389.cpp 定義控制台應用程式的入口點。並查集,求每個集合中的元素個數 在合併時將子樹中的結點數目加到根結點 include stda...

FPGA工程師筆試面試題(二)

1 ic設計中同步復位與非同步復位的區別 同步復位在時鐘沿才復位訊號,完成復位動作。非同步復位不管時鐘,只要復位訊號滿足條件,就完成復位動作。非同步復位對復位訊號要求比較高,不能有毛刺,如果其與時鐘關係不確定,也可能出現亞穩態。2 moore 與 mealy狀態機的特徵 兩種典型的狀態機是摩爾 mo...