從電子管到CPU

在線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控制端輸出 控制端 輸出
01xz 01xz
0z00/z0/z 00z0/z0/z
1z11/z1/z 11z1/z1/z
xzxxx xxzxx
zzxxx zxzxx
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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91324.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Javase-8.數組的練習

1.查找數組中指定元素(二分查找)以升序數組為例, 二分查找的思路是先取中間位置的元素, 然后使用待查找元素與數組中間元素進行比較&#xff1a; 如果相等&#xff0c;即找到了返回該元素在數組中的下標 如果小于&#xff0c;以類似方式到數組左半側查找 如果大于&#xff0c;以…

H3CNE綜合實驗之機器人

H3CNE綜合實驗之機器人 實驗拓撲圖實驗需求 1.按照圖示配置 IP 地址 2.SW1 和 SW2 之間的直連鏈路配置鏈路聚合 3.公司內部業務網段為 Vlan10 和 Vlan20;Vlan10 是市場部&#xff0c;Vlan20 是技術部&#xff0c;要求對 Vlan 進行命名以識別; ? PC8 屬于 Vlan10&#xff0c…

2025/7/15——java學習總結

Java IO、Stream、異常與 File 全體系總結&#xff1a;從基礎到進階的完整突破一、核心知識深耕&#xff1a;四大模塊的體系與底層邏輯&#xff08;一&#xff09;IO 流&#xff1a;數據傳輸的基礎通道體系架構與核心分類按流向&#xff1a;輸入流&#xff08;InputStream/Read…

【軌物方案】當補貼退潮,光伏電站如何回歸價值本質?

中國光伏產業正站在一個歷史性的拐點。過去&#xff0c;國家補貼的“黃金時代”催生了裝機量的爆發式增長&#xff0c;許多電站在建設初期將重心放在了快速并網&#xff0c;卻忽視了貫穿2-30年生命周期的運維規劃。如今&#xff0c;補貼浪潮逐漸退去&#xff0c;各大企業開始從…

群暉Nas - Docker(ContainerManager)上安裝SVN Server和庫權限設置問題

上次安裝了Gitlab&#xff0c;可以參考這篇&#xff08;群暉Nas - Docker&#xff08;ContainerManager&#xff09;上安裝GitLab&#xff09;&#xff0c;今天來搞SVN服務器&#xff0c;廢話不多說。 下載鏡像 還是先下載鏡像&#xff08;garethflowers/svn-server&#xff…

前端打包自動壓縮為zip--archiver

安裝依賴 pnpm add archiver types/archiver/vitePlugins/autoBuildZip.ts import { Plugin } from vite; import archiver from archiver; import fs from fs;const compressFolder (folderPath: string, outputFilePath: string) > {const output fs.createWriteStream(…

React響應式組件范式:從類組件到Hooks

?引言 在UI開發中&#xff0c;"狀態變化自動觸發UI更新"的響應式機制是構建動態界面的核心。React通過獨特的??單向數據流??和??虛擬DOM&#xff08;Virtual DOM&#xff09;?? 實現這一目標&#xff0c;但類組件&#xff08;Class Components&#xff09;…

com2tcp工具

com2tcp 是 com0com 套件中的一個實用工具&#xff0c;用于將本地串口&#xff08;COM&#xff09;數據轉發到 TCP/IP 網絡&#xff0c;或者將 TCP/IP 數據轉發到本地串口&#xff0c;實現串口數據的網絡透傳。 1. com2tcp 基本用法 &#xff08;1&#xff09;安裝 com0com 從…

MySQL實操:將Word表格數據導入MySQL表

文章目錄 1. 提出任務1.1 Word表格數據1.2 查看商品空表1.3 任務要求2. 完成任務2.1 借助AI2.1.1 利用AI生成SQL語句2.1.2 在Navicat里執行查詢2.1.3 查看商品表記錄2.2 借助Excel2.2.1 將Word表格數據復制到Excel2.2.2 新建商品表2.2.3 利用導入向導將電子表格數據導入商品表2…

什么是Podman?能否替代Docker?Podman快速入門

什么是PodmanPodman&#xff08;POD Manager&#xff09;是一個開源的無守護進程&#xff08;daemonless&#xff09;容器引擎&#xff0c;用于管理容器、容器鏡像、容器卷和網絡。它兼容 OCI 標準&#xff0c;可以運行 Docker 鏡像&#xff0c;并且設計上與 Docker CLI 命令高…

開通保存圖片權限

直接粘貼就可以用 上干貨 可以的話希望點個start/* 小程序特有相關 */mp-weixin: {appid: VITE_WX_APPID,setting: {urlCheck: false,minified : true //是否壓縮js},usingComponents: true,"lazyCodeLoading": "requiredComponents", //按需注入"pe…

【趙渝強老師】大數據交換引擎Sqoop

Sqoop是SQL To Hadoop的簡稱&#xff0c;它是一款開源的工具&#xff0c;主要用于在Hadoop&#xff08;Hive&#xff09;與傳統的數據庫&#xff08;Oracle、MySQL等&#xff09;間進行數據的傳遞。通過使用Sqoop可以將一個關系型數據庫中的數據導進到Hadoop的HDFS中&#xff0…

C++進階-map的應用

目錄 1.預備知識 2.map的補充知識 2.1map的插入方式 2.2訪問鍵和值 2.3map::operator[]的補充 2.4另外一些map的成員函數的補充 3.map的應用實踐-力扣刷題-前k個高頻單詞 3.1解法1 3.2解法2 3.3解法3 4.map的應用實踐-力扣刷題-隨機鏈表的復制 4.1C語言解法 4.2C解…

【三維重建工具】NeRFStudio、3D GaussianSplatting、Colmap安裝與使用指南

目錄 一、NeRFStudio安裝1.安裝&#xff08;ubuntu系統&#xff09;2.安裝&#xff08;windows系統&#xff09; 二、安裝tinycudann三、Colmap安裝與使用1. 安裝依賴2. 安裝colmap3.使用colmap3.1 可視化界面使用3.2 Nerfstudio命令行調用Colmap3.3 colmap結果不準時的修復3.4…

Mybatis05-動態sql

一、應用場景MyBatis 的 動態 SQL 是指根據不同的條件動態拼接生成 SQL 語句的能力。它的最大優勢是&#xff1a;避免寫多個 XML 映射語句、避免 SQL 冗余、提升代碼復用性和可維護性。示例1&#xff1a;用戶可以通過勾選框&#xff0c;勾選不同的數據進行批量刪除&#xff0c;…

VSCODE 選中多行 需要同時按住alt鍵才可以

在 VS Code 中&#xff0c;如果你發現 必須按住 Alt 鍵才能選中多行&#xff08;即“列選擇”或“塊選擇”模式&#xff09;&#xff0c;而直接拖動鼠標無法多選&#xff0c;可能是由于以下原因導致的&#xff1a;1. 檢查是否啟用了“列選擇模式”VS Code 默認情況下&#xff1…

2025前端面試真題以及答案-不斷整理中,問題來源于牛客真題

一、 項目內存泄露react與vue的渲染機制有哪些不同react fiber架構vue2與3&#xff0c;為什么用proxy代替defineproperty性能優化有哪些三欄布局實現方式重排與重繪一個對話聊天框如何減少重排&#xff08;我回答的是絕對定位&#xff0c;將聊天框定位在下面&#xff0c;類似于…

雷軍的 IP 革命:人格化力量如何重塑商業規則|創客匠人

小米 YU7 發布會 3 分鐘售罄 20 萬臺的奇跡&#xff0c;撕開了一個時代真相&#xff1a;當商業競爭進入深水區&#xff0c;決定勝負的不再是產品參數&#xff0c;而是創始人 IP 的人格穿透力。雷軍僅憑個人影響力撬動數十億級交易&#xff0c;這絕非偶然&#xff0c;而是人格化…

SpringBoot3:應對C10K并發挑戰的優化指南

嘿&#xff0c;哥們&#xff01;還在為服務的并發量上不去而頭疼嗎&#xff1f;用戶量一上來&#xff0c;CPU、內存就告急&#xff0c;接口響應慢得像蝸牛&#xff1f;別慌&#xff0c;今天我們就來盤一盤&#xff0c;怎么用最新的Spring Boot 3&#xff0c;把服務性能調教到極…

響應式編程入門教程第三節:ReactiveCommand 與 UI 交互

響應式編程入門教程第一節&#xff1a;揭秘 UniRx 核心 - ReactiveProperty - 讓你的數據動起來&#xff01; 響應式編程入門教程第二節&#xff1a;構建 ObservableProperty&#xff1c;T&#xff1e; — 封裝 ReactiveProperty 的高級用法 響應式編程入門教程第三節&#x…