Verilog規(guī)范對于一個好的IC設(shè)計至關(guān)重要。
本文包含以下幾方面內(nèi)容,程序設(shè)計,模塊例化、運(yùn)算符,模塊設(shè)計模板
目標(biāo):用最簡單,最簡潔的方式,設(shè)計最易讀,最高效的代碼
1、程序設(shè)計
1)設(shè)計時不用的語法
2)設(shè)計時使用的語法,主要為下述a,b,c三類
3)電路設(shè)計結(jié)構(gòu),主要有以下三種
??
4)電路設(shè)計要點(diǎn)
[1]?一個always只產(chǎn)生一個信號
下述不合適
改為下述,只考慮一個信號,調(diào)試,分析,代碼修改很方便,不需要考慮很多
[2]?一個信號只在一個always中產(chǎn)生
下述不符合要求,在多個always中產(chǎn)生
[3]?always是描述一個信號產(chǎn)生的方法,即在什么情況下,信號值為多少,其它情況下,值又為多少,情況要全部考慮
[4] 條件判斷只允許使用if else和case,其它的不使用(包括casex);
[5] 含有posedge或negedge的,一定是D觸發(fā)器,是時序電路
[6] 想立即有結(jié)果用組合邏輯,延遲一拍有結(jié)果用時序邏輯
2、模塊例化
1)什么是例化,簡單到復(fù)雜
2)例化方法
3)參數(shù)例化
? ??
3、運(yùn)算符
1)信號類型reg/wire
(1)設(shè)計代碼僅用reg,wire兩種類型
(2)設(shè)計代碼中,由本模塊且是always產(chǎn)生的信號,為reg類型?
(3)測試代碼中,用initial產(chǎn)生的對測試模塊的輸入信號,用reg類型
(4)其它情況都用wire
(5)reg類型的信號,不一定產(chǎn)生寄存器
2)參數(shù)parameter
(1)將整個模塊中的CNT_C_W替換成12
(2)參數(shù)名用大寫
3)算術(shù)運(yùn)算符(+,-,*,/,%)
(1)+,-,*用的多,/,%少用,消耗資源多,用的少
4)賦值運(yùn)算符(=,<=),注:時序邏輯用<=,組合邏輯用=,其它情況不存在
(1)時序邏輯用<=
(2)組合邏輯用=
5)關(guān)系運(yùn)算符(>,<,>=,<=)
6)邏輯運(yùn)算符(&&,||,?。?/p>
(1)一般兩邊都是1bit信號,多Bit也可以
(2)一般用于條件判斷
7)位運(yùn)算符(~,|,^,&)
(1)一般用于賦值
8)移位運(yùn)算符(<<,>>)
(1)一般用于乘除運(yùn)算
(2)右移1位表示除2,左移1位表示乘2
9)拼接運(yùn)算符({ })
(1){a[0],b[3:2]}
(2){{3{a[0]}},b[2],a[1]}
4、模塊設(shè)計模板
1)解析電路功能
下圖為自加1的電路圖,左邊為組合邏輯,右邊為時序邏輯
2)修改電路設(shè)計模塊
verilog模板
規(guī)則:輸出信號必須打一拍送出去,所以會在always中賦值,所以輸出信號定義為reg類型
先定義,位寬參數(shù),輸入,輸出,中間信號,編寫組合邏輯,時序邏輯代碼,下述為上圖加法器代碼
編輯:黃飛
?
評論
查看更多