https://www.icourse163.org/learn/UESTC-1205788811?tid=1450474442#/learn/content?type=detail&id=1233293349&cid=1252197791



1、偶數分頻
偶數倍分頻相對簡單,可以通過計數器對預分頻的脈沖沿計數實現,如果要進行N倍(N為整數)偶數分頻,可由預分頻的時鐘觸發計數器計數,當計數器從0計數到N/2—1時,輸出時鐘進行翻轉,并給計數器一個復位信號,使得下一個時鐘從零開始計數,以此循環下去。分頻的主體程序如下:
```
module freq_div_even(input clk_in,
input reset,
output reg clk_out
);
reg[2:0] count;
parameter N=8;
always@(posedge clk_in)
begin
if(!reset)
begin
count<=0;
clk_out<=0;
end
else
if(count==(N/2-1))
begin
clk_out<=~clk_out;
count<=0;
end
else
begin
count<=count+1;
end
end
endmodule
```
2、奇數分頻
對于對占空比沒有特殊要求的奇數分頻,需要對上升沿和下降沿脈沖進行計數,利用下降沿產生的波形移相半個輸入脈沖的作用,最后用錯位“異或”法實現。一個13分頻的程序如下:
module count_num(
input clk,
input reset,
output cout//這里是wire型變量
);
reg[4:0] m,n;
reg cout1,cout2;
assign cout = cout1 | cout2//**口訣:模塊輸入端必須用wire,模塊輸出端可以用wire,reg,assign必須用wire,always必須用reg**
```
always@(posedge clk)
begin
if(!reset)
begin cout1<=0; m<=0; end
else
begin
if(m=NUM-1)
m<=0;
else
m<=m+1;
if(m<(NUM-1)/2)
cout1<=1;
else
cout1<=0;
end
end
always@(negedge clk)
begin
if(!reset)
begin cout2<=0; n<=0; end
else
begin
if(n=NUM-1)
n<=0;
else
n<=n+1;
if(n<(NUM-1)/2)
cout2<=1;
else
cout2<=0;
end
end
endmodule
```
- 空白目錄
- 流水線
- 流水線性能測評
- 計算機性能測評
- 流水線設計
- 購物車狀態機
- 序列檢測器
- 序列檢測10010
- 序列檢測10010帶圖
- 反相器
- 計數器
- 分頻電路
- 偶數分頻
- 奇數分頻
- 小數分頻
- 同步復位異步釋放all
- 對的-異步復位同步釋放原理
- 同步復位異步釋放
- 異步復位為什么要同步釋放 ?
- FPGA-異步復位同步釋放 通俗解釋
- 同步復位
- 狀態機
- 狀態機的分類
- 狀態機5個要素
- FIFO
- 異步fifo中同步為什么要用兩級觸發器
- 亞穩態
- 亞穩態的產生機理、消除辦法 (可以理解為什么打拍)
- 面向對象思想
- 為什么D觸發器有setup time和hold time的要求
- Tsu,Tco,Th,Tpd的概念
- verilog
- 自啟動
- 毛刺
- 馮諾依曼