1. verilog讀取十進(jìn)制txt文件
'd0表示十進(jìn)制數(shù)0,'d1表示十進(jìn)制數(shù)1,'d19表示十進(jìn)制數(shù)19。parameter語句用于聲明常量,parameterS0='d0,S1='d1,......,S19='d19;聲明標(biāo)識(shí)符S0代表常量十進(jìn)制數(shù)0、標(biāo)識(shí)符S1代表常量十進(jìn)制數(shù)1、......標(biāo)識(shí)符S19代表常量十進(jìn)制數(shù)19。
2. verilog 10進(jìn)制
(1)所有綜合工具都支持的結(jié)構(gòu):always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。
(2)所有綜合工具都不支持的結(jié)構(gòu):time,defparam,$finish,fork,join,initial,delays,UDP,wait。(3)有些工具支持有些工具不支持的結(jié)構(gòu):casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。建立可綜合模型的原則要保證VerilogHDL賦值語句的可綜合性,在建模時(shí)應(yīng)注意以下要點(diǎn):(1)不使用initial。(2)不使用10。(3)不使用循環(huán)次數(shù)不確定的循環(huán)語句,如forever、while等。(4)不使用用戶自定義原語(UDP元件)。(5)盡量使用同步方式設(shè)計(jì)電路。(6)除非是關(guān)鍵路徑的設(shè)計(jì),一般不采用調(diào)用門級(jí)元件來描述設(shè)計(jì)的方法,建議采用行為語句來完成設(shè)計(jì)。(7)用always過程塊描述組合邏輯,應(yīng)在敏感信號(hào)列表中列出所有的輸入信號(hào)。(8)所有的內(nèi)部寄存器都應(yīng)該能夠被復(fù)位,在使用FPGA實(shí)現(xiàn)設(shè)計(jì)時(shí),應(yīng)盡量使用器件的全局復(fù)位端作為系統(tǒng)總的復(fù)位。(9)對(duì)時(shí)序邏輯描述和建模,應(yīng)盡量使用非阻塞賦值方式。對(duì)組合邏輯描述和建模,既可以用阻塞賦值,也可以用非阻塞賦值。但在同一個(gè)過程塊中,最好不要同時(shí)用阻塞賦值和非阻塞賦值。(10)不能在一個(gè)以上的always過程塊中對(duì)同一個(gè)變量賦值。而對(duì)同一個(gè)賦值對(duì)象不能既使用阻塞式賦值,又使用非阻塞式賦值。(11)如果不打算把變量推導(dǎo)成鎖存器,那么必須在if語句或case語句的所有條件分支中都對(duì)變量明確地賦值。(12)避免混合使用上升沿和下降沿觸發(fā)的觸發(fā)器。(13)同一個(gè)變量的賦值不能受多個(gè)時(shí)鐘控制,也不能受兩種不同的時(shí)鐘條件(或者不同的時(shí)鐘沿)控制。(14)避免在case語句的分支項(xiàng)中使用x值或z值。不能綜合的語句:1、initial只能在testbench中使用,不能綜合。(我用ISE9.1綜合時(shí),有的簡(jiǎn)單的initial也可以綜合,不知道為什么)2、eventsevent在同步testbench時(shí)更有用,不能綜合。3、real不支持real數(shù)據(jù)類型的綜合。4、time不支持time數(shù)據(jù)類型的綜合。5、force和release不支持force和release的綜合。6、assign和deassign不支持對(duì)reg數(shù)據(jù)類型的assign或deassign進(jìn)行綜合,支持對(duì)wire數(shù)據(jù)類型的assign或deassign進(jìn)行綜合。7、forkjoin不可綜合,可以使用非塊語句達(dá)到同樣的效果。8、primitives支持門級(jí)原語的綜合,不支持非門級(jí)原語的綜合。9、table不支持UDP和table的綜合。10、敏感列表里同時(shí)帶有posedge和negedge如:always@(posedgeclkornegedgeclk)beginend這個(gè)always塊不可綜合。11、同一個(gè)reg變量被多個(gè)always塊驅(qū)動(dòng)12、延時(shí)以開頭的延時(shí)不可綜合成硬件電路延時(shí),綜合工具會(huì)忽略所有延時(shí)代碼,但不會(huì)報(bào)錯(cuò)。如:a=10b;這里的10是用于仿真時(shí)的延時(shí),在綜合的時(shí)候綜合工具會(huì)忽略它。也就是說,在綜合的時(shí)候上式等同于a=b;13、與X、Z的比較可能會(huì)有人喜歡在條件表達(dá)式中把數(shù)據(jù)和X(或Z)進(jìn)行比較,殊不知這是不可綜合的,綜合工具同樣會(huì)忽略。所以要確保信號(hào)只有兩個(gè)狀態(tài):0或1。3. verilog寫txt文件
1. 按鍵按下后,進(jìn)行加減乘除操作
2. Verilog往TXT文本文件中寫入數(shù)據(jù)
3. 完成計(jì)算模塊
4. 最終實(shí)現(xiàn)加減乘除計(jì)算器
4. verilog讀十進(jìn)制的數(shù)據(jù)
`define N 10
module CNT(
CLK,
RST,
CNTO
);
input CLK;
input RST;
output [`N:0] CNTO;
reg [9:0] flg;
reg [`N:0] CNTO;
always @(posedge CLK or posedge RST)
begin
if (RST)
begin
flg <= 10'd0000;
CNTO <= `N'h000;
end
else if (flg == 10'd1000)
begin
CNTO <= 10'h000;
flg <= 10'd0000;
end
else
flg <= flg +1;
end
endmodule
5. verilog讀取二進(jìn)制文件
1、正數(shù)的補(bǔ)碼表示:
正數(shù)的補(bǔ)碼 = 原碼
負(fù)數(shù)的補(bǔ)碼 = {原碼符號(hào)位不變} + {數(shù)值位按位取反后+1} or
= {原碼符號(hào)位不變} + {數(shù)值位從右邊數(shù)第一個(gè)1及其右邊的0保持不變,左邊安位取反}
以十進(jìn)制整數(shù)+97和-97為例:
+97原碼 = 0110_0001b
+97補(bǔ)碼 = 0110_0001b
-97原碼 = 1110_0001b
-97補(bǔ)碼 = 1001_1111b
2、純小數(shù)的原碼:
純小數(shù)的原碼如何得到呢?方法有很多,在這里提供一種較為便于筆算的方法。
以0.64為例,通過查閱可知其原碼為0.1010_0011_1101_0111b。
操作方法:
將0.64 * 2^n 得到X,其中n為預(yù)保留的小數(shù)點(diǎn)后位數(shù)(即認(rèn)為n為小數(shù)之后的小數(shù)不重要),X為乘法結(jié)果的整數(shù)部分。
此處將n取16,得
X = 41943d = 1010_0011_1101_0111b
即0.64的二進(jìn)制表示在左移了16位后為1010_0011_1101_0111b,因此可以認(rèn)為0.64d = 0.1010_0011_1101_0111b 與查詢結(jié)果一致。
再實(shí)驗(yàn)n取12,得
X = 2621d = 1010_0011_1101b 即 0.64d = 0.1010_0011_1101b,在忽略12位小數(shù)之后的位數(shù)情況下,計(jì)算結(jié)果相同。
3、純小數(shù)的補(bǔ)碼:
純小數(shù)的補(bǔ)碼遵循的規(guī)則是:在得到小數(shù)的源碼后,小數(shù)點(diǎn)前1位表示符號(hào),從最低(右)位起,找到第一個(gè)“1”照寫,之后“見1寫0,見0寫1”。
以-0.64為例,其原碼為1.1010_0011_1101_0111b
則補(bǔ)碼為:1.0101_1100_0010_1001b
當(dāng)然在硬件語言如verilog中二進(jìn)制表示時(shí)不可能帶有小數(shù)點(diǎn)(事實(shí)上不知道哪里可以帶小數(shù)點(diǎn))。
4、一般帶小數(shù)的補(bǔ)碼
一般來說這種情況下先轉(zhuǎn)為整數(shù)運(yùn)算比較方便
-97.64為例,經(jīng)查詢其原碼為1110_0001.1010_0011_1101_0111b
筆算過程:
-97.64 * 2^16 = -6398935 = 1110_0001_1010_0011_1101_0111b,其中小數(shù)點(diǎn)在右數(shù)第16位,與查詢結(jié)果一致。
則其補(bǔ)碼為1001_1110_0101_1100_0010_1001b,在此采用 負(fù)數(shù)的補(bǔ)碼 = {原碼符號(hào)位不變} + {數(shù)值位按位取反后+1} 方法
5、補(bǔ)碼得到原碼:
方法:符號(hào)位不動(dòng),幅度值取反+1 or符號(hào)位不動(dòng),幅度值-1取反
-97.64補(bǔ)碼 = 1001_1110(.)0101_1100_0010_1001b
取反 = 1110_0001(.)1010_0011_1101_0110b
+1 = 1110_0001(.)1010_0011_1101_0111b 與查詢結(jié)果一致
6、補(bǔ)碼的拓展:
在運(yùn)算時(shí)必要時(shí)要對(duì)二進(jìn)制補(bǔ)碼進(jìn)行數(shù)位拓展,此時(shí)應(yīng)將符號(hào)位向前拓展。
-5補(bǔ)碼 = 4'b1011 = 6'b11_1011
ps.原碼的拓展是將符號(hào)位提到最前面,然后在拓展位上部0.
-5原碼 = 4‘b’1101 = 6'b10_0101,對(duì)其求補(bǔ)碼得6'b11_1011,與上文一致。
擴(kuò)展資料:
計(jì)算機(jī)中的符號(hào)數(shù)有三種表示方法,即原碼、反碼和補(bǔ)碼。三種表示方法均有符號(hào)位和數(shù)值位兩部分,符號(hào)位都是用0表示“正”,用1表示“負(fù)”,而數(shù)值位,三種表示方法各不相同。
在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來表示和存儲(chǔ)。原因在于,使用補(bǔ)碼,可以將符號(hào)位和數(shù)值域統(tǒng)一處理;同時(shí),加法和減法也可以統(tǒng)一處理。此外,補(bǔ)碼與原碼相互轉(zhuǎn)換,其運(yùn)算過程是相同的,不需要額外的硬件電路。
6. verilog怎么讀取txt文件
換行的時(shí)候,就等光標(biāo)出現(xiàn)在寫完一行的末尾之際,敲一下回車鍵,這樣就實(shí)現(xiàn)了換行。