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