在線verilog轉電路圖
簡單門電路 https://logic.ly/demo/
數學基礎
普通邏輯
與自然語言關系緊密, 亞里士多德三段論,??穆勒五法 , 語言, 語義,概念,定義,辯論, 詐騙 等, 是文科類的邏輯。
離散數學
不連續數學
數理邏輯
命題邏輯與謂詞邏輯, 與數學推理關系緊密, 它能簡化一些普通邏輯中的描述
圖論
二面圖,歐拉圖,樹,哈密頓圖
組合
組合計數、組合設計、組合規劃,組合幾何
抽象代數
_研究各種代數系統 _群,環,域 模,格,線性空間, ,Galois理論,布爾代數等
布爾代數
是與門電路直接相關的一種代數
物理級 & 開關級
真空電子管二極管(1904)
電子三極管(1906)
晶體三極管(1947)
場效應管
N溝道增強型輸出曲線
或非門 和 與非門
主要缺點:
1)輸出電阻R0受輸入狀態影響,即輸出電阻不一樣,能夠相差四倍。如:
A=1, B=1,則R0 = Ron2 + Ron4 = 2Ron
A=0, B=0,則R0 = Ron2 // Ron4 = 1/2Ron
2)輸出的高低電平受輸入端數目的影響
輸入端越多,,串聯的驅動管數目也越多,輸出的VOL越高,VOH也更高。
當輸入端全部為低電平時,輸入端越多負載并聯的數目越多,輸出的高電平VOH也越高。
3)邏輯上與非 ,或非都完備,但工程上與非更好
PMOS采用空穴導電,NMOS采用電子導電,由于PMOS的載流子的遷移率比NMOS的遷移率小,所以,同樣尺寸條件下,PMOS的充電時間要大于NMOS的充電時間長。
在互補CMOS電路中,與非門是PMOS管并聯,NMOS管串聯,而或非門正好相反,所以,同樣尺寸條件下,與非門的速度快,所以,在互補CMOS電路中,優先選擇與非門。
與非門 (數字電路的原子)
門級
門電路
與非是完備的,只需與非門就可以搭建CPU
鎖存器與觸發器
鎖存器原型
X==Y ,
X=0,Y=0
X=1,Y=1
即使撤去X的輸入,Y仍保持撤去X之前的值,電路有記憶功能,所以產生了時序電路
可編程器件
組合邏輯的范式 ROM
LUT 查找表
ABCD的地址線, RAM存不同的值,則LUT實現不同的邏輯
LE 可編程邏輯單元
systemVerilog
SystemVerilog是Verilog的超集,用于硬件描述與驗證
物理級
描述了電路的物理實現,包括晶體管的尺寸、布局、連線等。這一層次通常由EDA(電子設計自動化)工具在綜合、布局和布線(Place & Route)過程中處理。
開關級
描述了晶體管和開關級別的電路行為。在這一層次,設計者需要考慮晶體管的開關特性,通常用于非常底層的電路設計和分析
大多數fpga不支持開關級描述, modelsim支持
nmos | 控制端 | 輸出 | 控制端 | 輸出 | pmos | 控制端 | 輸出 | 控制端 | 輸出 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | x | z | 0 | 1 | x | z | |||
0 | z | 0 | 0/z | 0/z | 0 | 0 | z | 0/z | 0/z | |
1 | z | 1 | 1/z | 1/z | 1 | 1 | z | 1/z | 1/z | |
x | z | x | x | x | x | x | z | x | x | |
z | z | x | x | x | z | x | z | x | x |
module MOS_TEST(input CTRL, IN1,output OUTN, OUTP);//tripmos pmos1 (OUTP, IN1, CTRL) ;//no instantiation namenmos (OUTN, IN1, CTRL) ;
endmodule/**
# vsim -voptargs="+acc" work.tb
# Start time: 00:18:54 on Oct 04,2024
# ** Note: (vsim-3813) Design is being optimized due to module recompilation...
# Loading work.tb(fast)
# Loading work.MOS_TEST(fast)
# Time = 0 : CTRL = 0, IN1 = 0, OUTN = z, OUTP = 0
# Time = 10 : CTRL = 0, IN1 = 1, OUTN = z, OUTP = 1
# Time = 20 : CTRL = 1, IN1 = 0, OUTN = 0, OUTP = z
# Time = 30 : CTRL = 1, IN1 = 1, OUTN = 1, OUTP = z
# Time = 40 : CTRL = 0, IN1 = 0, OUTN = z, OUTP = 0
# ** Note: $finish : ../tb.v(25)
# Time: 50 fs Iteration: 0 Instance: /tb
**/// 測試模塊
module tb;reg CTRL, IN1;wire OUTN, OUTP;// 實例化被測試模塊MOS_TEST uut (.CTRL(CTRL), .IN1(IN1), .OUTN(OUTN), .OUTP(OUTP));initial begin// 初始化輸入CTRL = 0; IN1 = 0;#10; // 等待10個時間單位// 測試不同的輸入組合CTRL = 0; IN1 = 1;#10;CTRL = 1; IN1 = 0;#10;CTRL = 1; IN1 = 1;#10;CTRL = 0; IN1 = 0;#10;// 結束測試$finish;end// 監視信號變化initial begin$monitor("Time = %d : CTRL = %b, IN1 = %b, OUTN = %b, OUTP = %b", $time, CTRL, IN1, OUTN, OUTP);end
endmodule
門級
多路選擇器
在線測試
下面對比四選一選擇的實現方式,來說明門級建模較行為級建模的繁瑣性。
輸入為 A、B、C、D,輸出為 F,選擇信號為 S1、S0,則 4 路選擇器的表達式為:
下面的門電路的實例沒起名字
module mux4to1_gate(input A, B, C, D ,input S0, S1,output F );//reversingwire S0R, S1R ;not (S0R, S0) ;not (S1R, S1) ;//logic andwire AAND, BAND, CAND, DAND ;and (AAND, A, S1R, S0R);and (BAND, B, S1R, S0);and (CAND, C, S1, S0R);and (DAND, D, S1, S0);//outGate 是or 門的實例名,前面的門沒起名字or outGate(F, AAND, BAND, CAND, DAND) ;
endmodule
門級鎖存器
/**
門級
點觸B開燈
點觸A關燈
**/
module my_latch(input A, // RESET 信號input B, // SET 信號output C
);
assign C = C & ~A | B ;
endmodule
/**
門級
點觸B開燈
點觸A關燈
**/
module my_latch(input A, // RESET 信號input B, // SET 信號output C
);wire w0,w1,w2 ;not (w0, A) ;
and (w2,w0,w1) ;
or (w1, w2, B) ;assign C=w1;endmodule
module my_latch(input A, // RESET 信號input B, // SET 信號output C
);
wire w0,w1,w2 ;
assign w0=~A;
assign w2=w0 && w1;
assign w1=w2||B;
assign C=w1;
endmodule
module my_latch(input A, // RESET 信號input B, // SET 信號output reg C
);
always @ (A or B) beginif (A) C = 0; // 如果 A 為高,則復位 C 為 0else if (B) C = 1; // 如果 B 為高,則置位 C 為 1else C = C; // 如果 A 和 B 都為低,則保持 C 的當前狀態
end
endmodule
梯形圖 與上面的數字電路功能上相同
實物
寄存器傳輸級(RTL)
RTL描述關注于數據在寄存器之間的流動以及基本的邏輯操作。它使用組合邏輯(如邏輯門、算術運算)和時序邏輯(如觸發器、時鐘邊沿)來描述電路。
這樣的描述更接近于硬件的實現細節
module adderRTL(input [3:0] a,input [3:0] b,output [4:0] sum,input clk
);reg [3:0] temp_sum;always @(posedge clk) begintemp_sum <= a + b; // 在時鐘邊沿更新寄存器
endassign sum = temp_sum; // 將內部寄存器的值賦給輸出endmodule
行為級
行為級描述關注于電路做什么,而不是如何做。它使用高級語言結構(如過程、函數、條件語句、循環等)來描述電路的功能和行為。 行為級代碼可能不包含時鐘信號,不直接涉及時鐘邊沿觸發的行為。
模擬電路的元件為電阻,電容,電感,三極管等
數字電路的元件為 基本門電路, 選擇器 ,D觸發器, 運算器, 比較器,計數器 等
module adder_behavioral(input [3:0] a,input [3:0] b,output reg [4:0] sum
);always @(*) beginsum = a + b; // 簡單的行為級描述
endendmodule
module mux4to1_behavior(input A, B, C, D ,input S0, S1,output F );assign F = {S1, S0} == 2'b00 ? A :{S1, S0} == 2'b01 ? B :{S1, S0} == 2'b10 ? C :{S1, S0} == 2'b11 ? D : 0 ;
endmodule
系統級
系統級設計關注于整個系統的功能和性能,通常不涉及具體的硬件實現細節。
// 定義一個簡單的內存接口
interface MemoryInterface;logic [31:0] address;logic [31:0] data;logic write_enable;logic read_enable;modport processor (output address,input data,output write_enable,output read_enable);
endinterface// 定義一個簡單的處理器類
class Processor;MemoryInterface mem_if;int program_counter;function new(MemoryInterface mem_if);this.mem_if = mem_if;this.program_counter = 0;endfunction// 處理器執行指令的方法function void execute_instruction();if (mem_if.read_enable) begin// 讀取內存中的數據mem_if.data = read_from_memory(mem_if.address);endif (mem_if.write_enable) begin// 寫數據到內存write_to_memory(mem_if.address, mem_if.data);end// 更新程序計數器program_counter++;endfunction// 模擬從內存讀取數據的方法function logic [31:0] read_from_memory(input logic [31:0] addr);// 這里可以添加內存讀取邏輯return 32'hDEADBEEF; // 示例數據endfunction// 模擬向內存寫入數據的方法function void write_to_memory(input logic [31:0] addr, input logic [31:0] data);// 這里可以添加內存寫入邏輯endfunction
endclassmodule top;MemoryInterface mem_if();Processor proc(mem_if);initial begin// 初始化內存接口mem_if.address = 0;mem_if.write_enable = 0;mem_if.read_enable = 1;// 模擬處理器執行指令for (int i = 0; i < 10; i++) beginproc.execute_instruction();$display("Data read from memory: %h", mem_if.data);endend
endmodule