从电子管到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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…