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

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

相关文章:

  • 迁移学习的概念和案例
  • 【前端Vue】this.resetForm(“form“)重置表单时出现indexOf报错的解决方案
  • Java 增强 switch 语句详解:从基础到进阶的全面指南
  • Sersync和Rsync部署
  • Ubuntu 安装
  • 22-C#的委托简单使用-2
  • Linux715 磁盘管理:逻辑卷
  • MyBatis Plus功能增强全解析:从手写SQL到优雅开发的进阶指南
  • 【jvm|基本原理】第四天
  • Vue3入门-指令补充
  • MyBatis与Spring整合优化实战指南:从配置到性能调优
  • 《每日AI-人工智能-编程日报》--2025年7月15日
  • mongoDB的CRUD
  • C++ Boost Aiso TCP 网络聊天(服务端客户端一体化)
  • QGIS新手教程9:字段计算器进阶用法与批量处理技巧
  • 操作HTML网页的知识点
  • Linux下调试器gdb/cgdb的使用
  • Unity 多人游戏框架学习系列一
  • 23.将整数转换为罗马数字
  • 全局 WAF 规则:构筑 Web 安全的坚固防线
  • 设计模式一: 模板方法模式 (Template Method Pattern)
  • 基于 AI 的大前端安全态势感知与应急响应体系建设
  • 检查WSL2子系统文件大小并删除
  • 《星盘接口10:时空回响》
  • OpenAI GPT-4o技术详解:全能多模态模型的架构革新与生态影响
  • 虚拟主机CPU占用100导致打不开的一次处理
  • 利用模型生成每个样本每个特征的 SHAP 值
  • 【Git 中的 branch 工作流】关于git 中 branch 的一些基本操作
  • 【每日算法】专题十_字符串
  • 小架构step系列15:白盒集成测试