当前位置: 首页 > news >正文

从电子管到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.lryc.cn/news/590092.html

相关文章:

  • Swarm Network 选择 Walrus 实现可验证 AI
  • 浏览器自动化方案
  • 小架构step系列16:代码文档
  • 共生型企业:驾驭AI自动化(事+AI)与人类增强(人+AI)的双重前沿
  • 道可云人工智能每日资讯|天津市人工智能(AI+信创)创新生态联盟成立
  • 面试150——数组字符串
  • 区块链之拜占庭容错算法——Practical Byzantine Fault Tolerance(PBFT)
  • 移动支付方式全解析:无卡支付、快捷支付、认证支付、协议支付与代扣的区别
  • 堆排序算法详解:原理、实现与C语言代码
  • 网络安全(初级)(Python实现sql自动化布尔盲注)
  • 牛客:HJ25 数据分类处理[华为机考][哈希][字符串]
  • python基础②-数据结构
  • 【DataWhale】快乐学习大模型 | 202507,Task02笔记
  • 牛客:HJ26 字符串排序[华为机考][map]
  • 3d max 图片(参考图)的导入
  • 设计模式—初识设计模式
  • Java大厂面试实录:从Spring Boot到AI大模型的深度技术拷问
  • iOS App 上架流程优化指南 工具组合与常见问题处理经验总结
  • C语言:第07天笔记
  • Ubuntu中man手册不全解决以及man手册中英文切换方法
  • pyJianYingDraft 在 import_srt 字幕添加花字效果
  • 海康线扫相机通过采集卡的取图设置
  • WSL2更新后Ubuntu 24.04打不开(终端卡住,没有输出)
  • 【中文核心期刊推荐】《激光与红外》
  • db.refresh()的重复使用和db.rollback()
  • 随机链表的复制数据结构oj题(CM11)
  • Python练习(4)Python参数传递的20道核心实战练习题(含答案与深度解析)(上)
  • BNN 技术详解:当神经网络只剩下 +1 和 -1
  • 《精华离散制造智能工厂三年规划》81页PPT
  • Git分支管理完全指南:从创建到合并与冲突解决