1 verilog的技術點231. 0-n迴圈計數器
4////////////////////////
//0-n迴圈計數器
5reg [19:0]cnt;
6always@(posedge clk or
negedge rst_n)
7if(!rst_n)
8 cnt<=20
'd0;
9else
if(cnt<20
'dn)
10 cnt<=cnt+1
'b1;
11else
12 cnt<=20
'd0;
13 或者
14reg [19:0]cnt;
15always@(posedge clk or
negedge rst_n)
16if(!rst_n)
17 cnt<=20
'd0;
18else
if(cnt==(20
'dn-1))
19 cnt<=20
'd0;
20else
21 cnt<=cnt+1
'b1;
2223
2. 復位訊號的處理
241. 如果沒有使用pll模組,則將rst打兩拍,形成「非同步復位,同步釋放」;
252. 如果使用了pll模組,則:
26 a. 先將rst打兩拍,形成「非同步復位,同步釋放」的同步復位rst1;
27 b. 取pll_rst = ~rst1 和 clk送入pll模組,並將locked訊號 和 rst相「與」形成 rst2;/*
注1_2
*/28 c. 再將rst2打兩拍,形成「非同步復位,同步釋放」的同步復位sys_syc_rst;
29 即(1) 還可以做個上電200us計數器,200us_ok高電平表示上電200us,在b中rst2=rst & locked & 200us_ok
30 (2) 外部復位釋放 且
31 pll輸出穩定 且
32 上電已滿200us,系統內部電路的復位才釋放,開始執行;
3334
input clk;
35input rst_n;
36output rst_nr2;
37reg rst_nr1,rst_nr2;
38//
非同步復位,同步釋放
39always@(posedge clk or
negedge rst_n)
40if(!rst_n)
41 rst_nr1<=1
'd0;
42else
43 rst_nr1<=1
'd1;
44//
再用一級暫存器進行同步處理
45always@(posedge clk or
negedge rst_n)
46if(!rst_n)
47 rst_nr2<=1
'd0;
48else
49 rst_nr2<=rst_nr1;
50//
如下處理後,可以保證系統充分穩定後(復位按鍵釋放 且 pll輸出穩定)才退出復位狀態,開始執行
51wire sys_rst_nr0 = rst_n & pll_locked;
52//
一級同步
53always@(posedge clk or
negedge rst_n)
54if(!sys_rst_nr0 )
55 sys_rst_nr1<=1
'd0;
56else
57 sys_rst_nr1 <=1
'd1;
58//
二級同步
59always@(posedge clk or
negedge rst_n)
60if(!sys_rst_nr0 )
61 sys_rst_nr2 <=1
'd0;
62else
63 sys_rst_nr2 <=sys_rst_nr1;
64//
生成最終系統復位訊號:控制其它電路
65wire sys_rst_n = sys_rst_nr2;
6667
3.帶使能端的暫存器
68 (輸出埠資料在en和clk控制下進行週期更新,每個資料的維持時間為以時鐘週期t的整數倍)
69reg en_regout;
70always@(posedge clk or
negedge rst_n)
71if(!rst_n)
72 en_regout<=1
'd0;
73else
if(en==1
'd1)
74 en_regout<=en_regin; //
en有效,資料在時鐘沿更新;不然,一直保持原值
753.1分頻時鐘:系統時鐘+分頻使能訊號=分頻時鐘
76 (a)最佳用pll產生分頻時鐘
77 (b)沒有pll時,用計數器產生分頻時鐘,但推薦用「分頻使能時鐘」
78 即用計數器產生分頻單週期脈衝,將之作為使能訊號配合原時鐘驅動外部reg
79 《===》用原時鐘的分頻時鐘 驅動外部reg
8081
8283
4.上公升沿和下降沿檢測器
84//
input signal
85reg signal_r;
86always@(posedge clk or
negedge rst_n)
87if(!rst_n)
88 signal_r<=1
'd0;
89else
90 signal_r<=signal;
9192
wire rising_edge_flag = signal & (!signal_r) ; //
判斷按鍵動作:按下?釋放?
93wire faling_edge_flag = (!signal) & signal_r ;
9495
5.跨時鐘域處理(同步處理)
965-0.使用接收域時鐘對輸入訊號進行2級同步處理;
975-1.單向控制訊號檢測
98 (用接收域時鐘檢測輸入控制訊號的上公升沿、下降沿;
99 利用單週期寬度的上公升沿、下降沿標誌作為控制使能訊號)
1005-2.專用握手訊號
1015-3.使用fifo
102103
6.m4k使用:寬度最大只能到36bit
104105
7.如何解決verilog中引數化的賦值:賦全0,賦全1,賦全z,賦全x
106 結論:賦全0、全x或者全z可採用'
b0、'bx或者'
bz的方式;
107 賦全1可採用賦~0或賦-1的方式較為簡潔。
Enumeration 使用中一些經驗
vector v new vector for int i 0 i 10 i v.add new integer i enumeration e v.elements while e.hasmoreelements system.out.println v.size 如果沒去執行這段程式,可能有的人...
MTK開發中一些經驗總結
1.在確定你的mtk工程完整而且在模擬器和真機上能正常執行 之前,不要開始工作。2.mtk開發 c是唯一選擇,不要試圖用把c 工程移植到mtk平台。3.ads c c compiler不同的編譯選項可能導致 的效能差異很大。ads使用armv4指令集,而真機是thumb指令集。4.mmi gui的工...
AND一些經驗
目錄 一 參考 1 程式設計師2020工作規範范文 總結 good 適合多看,程式設計師每天 每月做的事情總結了 一 目的 1 在公司來了很久了,有時候一些經驗想把記錄下來,專案 做人 等等 一 專案 1 板卡 pci2012a分為支援和不支援音效卡的 一 做人 1 不要過度依賴別人 1 有問題立馬...