知乎作者:彭谟威

来来来,让我们一起,左手右手一个慢动作。

每一个方向都值得一个人用一生去钻研,每一个步骤都有其自身的魅力。

第一步,做出实体芯片。

单片机一般理解为MCU(Microcontroller Unit,微控制单元)

包含定时器、ALU(Arithmetic Logic Unit,算术逻辑单元)、内存、寄存器、总线等部分

而普通的意义的单片机还包含GPIO、串口(UART)、DMA、协处理器、AD\DA等等。

看懂如下图

前置:计算机组成原理,微机原理。

流水线

前置:数字逻辑电路,集成电路设计及其EDA技术,verilog

把各个模块细分为寄存器级,比如移位运算器、节拍器、译码器、存储器等module minicpu(clk, reset, run, in, cs, pcout, irout, qtop, abus, dbus, out);

input clk,reset,run;

input [15:0] in;

output [1:0] cs;

output [15:0] irout, qtop, dbus, out;

output [11:0] pcout, abus;

wire [15:0] qnext, ramout, aluout;

reg [11:0] abus;

reg halt, jump, pcinc, push, pop, thru, qthru, dbus2qtop, dbus2ram, dbus2obuf, ir2dbus, qtop2dbus, alu2dbus, ram2dbus, in2dbus;

reg pop2, ir2abus, qtop2abus, qnext2abus;

reg [11:0] pcout, pcnext;

reg [15:0] out;

statef statef0(.clk(clk),.reset(reset),.run(run),.halt(halt),.cs(cs));

stackm stackm0(.clk(clk),.reset(reset),.load(dbus2qtop),.push(push),.pop(pop),.pop2(pop2),.thru(qthru),.d(dbus),.dthru(ramout),.qtop(qtop),.qnext(qnext));

alu alu0(.a(qtop),.b(qnext),.f(irout[4:0]),.s(aluout));

dpram #(16,10,1024) dpram0(.clk(clk),.load1(dbus2ram),.addr1(abus),.addr2(pcnext),.d1(dbus),.q1(ramout),.q2(irout));

物理上是这样的

然后会调试BUG,看时序。

前置:时序用MODELSIM,综合用QUARTUS II 等等

然后此时才刚刚开始。

继续生成电路网表,时序收敛,如果不对继续返回上述流程继续调试。

前置:Synopsys

回顾一下

此时应该生成版图文件,然后根据制造厂商提供的物理器件库进行最后的各种设计规则检查。

前置:集成电路版图设计,软件有Cadence:VirtuosoLayout Editor

送到代工厂

还要懂元器件

前置:半导体物理,半导体器件物理,固体物理,电介质物理,量子力学,热力学与数理统计。

根据得到的图表设计版图和工艺流程,大概是这样

前置:集成电路制造

然后进行电气测试,电磁测试,最后封装。

前置:集成电路封装技术

最后不能忘记出片的时候

焚香沐浴更衣,朝南拜三拜,祈祷不会有大问题。

第二步,设计系统驱动。

终于得到了物理上的片子

我们开始写汇编器,编译器。

本质上烧写进ROM的是这样的机器码。

汇编器(把汇编语言变成机器码)

前置:perl#!/usr/bin/perl -W

//********

*********//

print "*** LABEL LIST ***\n";

foreach $l (sort(keys(%label))){

printf "%-8s%03X\n",$l,$label{$l};

}

$addr=0;

print "\n*** MACHINE PROGRAM ***\n";

foreach (@source){

$line = $_;

s/\w+://;

if(/PUSHI\s+(-?\d+)/){

printf "%03X:%04X\t$line",$addr++,$MCODE{PUSHI}+($1&0xfff);

} elsif(/(PUSH|POP|JMP|JZ|JNZ)\s+(\w+)/){

printf "%03X:%04X\t$line",$addr++,$MCODE{$1}+$label{$2};

}elsif(/(-?\d+)/){

printf "%03X:%04X\t$line",$addr++,$1&0xffff;

} elsif(/([A-Z]+)/){

printf "%03X:%04X\t$line",$addr++,$MCODE{$1};

} else {

print "\t\t$line";

}

}

编译器 BISON和FLEX(把高级语言转换成汇编语言)

前置:编译原理%{

#include

%}

%union {char *s; int n;}

%token NAME NUMBER

%destructor { free($); } NAME NUMBER

%token IF WHILE DO

%type if0

%token GOTO ELSE INT IN OUT HALT

...

...

%%

int yyerror(char *s){ printf("%s\n",s); }

int main(){ yyparse(); }%{

#include

#include "y.tab.h"

int n=0;

%}

...

...

while    {yylval.n=++n;return(WHILE);}

[0-9]+       {yylval.s=strdup(yytext);return(NUMBER);}

[a-zA-Z][a-zA-Z0-9]*    {yylval.s=strdup(yytext);return(NAME);}

.            {return(yytext[0]);}

%%

int yywrap(){ return(1);}

终于可以固化进ROM可以跑程序了,你还需要一段小型的开启代码(bootloader)

前置:汇编语言start: JK start

nop

sdal 32

sdah 0

datp

loop:  ting

inl

ting

inh

jend cxcute

nop

jmp loop

inc

excute: call 32

nop

jmp start

nop

然后开始写操作系统

前置:ucos(嵌入式操作系统)

系统宏定义,系统功能配置,系统头文件,初始化文件,调度文件,任务管理文件

系统时间管理文件,信号量文件,邮箱文件,消息队列文件,内存管理文件,

系统服务文件,MAIN文件。

写操作系统中的任务

前置:C语言,数据结构,算法导论。double KalmanFilter(const double ResrcData,

double ProcessNiose_Q,double MeasureNoise_R,double InitialPrediction)

{

double R = MeasureNoise_R;

double Q = ProcessNiose_Q;

static        double x_last;

double x_mid = x_last;

double x_now;

static        double p_last;

double p_mid ;

double p_now;

double kg;

x_mid=x_last; //x_last=x(k-1|k-1),x_mid=x(k|k-1)

p_mid=p_last+Q; //p_mid=p(k|k-1),p_last=p(k-1|k-1),Q=噪声

kg=p_mid/(p_mid+R); //kg为kalman filter,R为噪声

x_now=x_mid+kg*(ResrcData-x_mid);//估计出的最优值

p_now=(1-kg)*p_mid;//最优值对应的covariance

p_last = p_now; //更新covariance值

x_last = x_now; //更新系统状态值

return x_now;

}

拿着含辛茹苦的板子还需要配置最小系统以及外围器件

前置:PCB设计和制造,电焊等技艺,模电、高频电子线路,信号与系统

如果有信号传输

通讯协议

前置:SPI,I2C,CAN,TCP/IP、wifi等等uint SPI_RW(uint uchar)

{

uint bit_ctr;

for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit

{

MOSI = (uchar & 0x80);         // output 'uchar', MSB to MOSI

uchar = (uchar << 1);           // shift next bit into MSB..

SCK = 1;                      // Set SCK high..

uchar |= MISO;        // capture current MISO bit

SCK = 0;              // ..then set SCK low again

}

return(uchar);            // return read uchar

}

RF天线

前置:微波技术,电磁场与电磁波,HFSS,天线技术等等。

计算机组成原理 微机原理 知乎,知乎问答丨从零制作单片机需要哪些知识?相关推荐

  1. 计算机组成原理 微机,【2017年整理】计算机组成原理-微机实验指导书.doc

    [2017年整理]计算机组成原理-微机实验指导书 实验 1<TPC-EM实验仪>和386EX实验模式软硬件介绍 1.1系统组成概述 <TPC-EM实验仪>是我们在吸收各大专院校 ...

  2. 计算机组成原理微机接口及应用实训装置

    ZN-105计算机组成原理微机接口及应用实训装置 一.概述: ZN-105计算机组成原理微机接口及应用实训装置规格:160×75×78cm.二者组合在一个实验台上,提高了规划化程度,管理水平,资源共享 ...

  3. 计算机组成原理微机接口及应用实验,QY-JSJ03

    计算机由运算器.存储器.控制器.输入设备和输出设备五大部件组成,指令(程序)和数据以二进制不加区别地存储在存储器中,程序自动运行.计算机组成原理是计算机专业的一门专业基础课,是硬件课程.通过学习,可以 ...

  4. 微型计算机sp作用,微机原理及应用A-中国大学mooc-题库零氪

    第一周 微型计算机基础概论(第1章) 作业 1.1 2 3 4 5 6 7 8 9 10 作业1 1.1 2 3 4 5 6 7 8 9 10 第二周 微处理器与总线(第2章) 第2章作业 1.若DS ...

  5. 计算机三级微机原理,计算机三级哪个考 微机原理与应用

    2006-03-05 回答 是可以的,下面是有关具体的规定: 证明1: 全国计算机等级考试免考高等教育自学考试相关课程的有关政策 随着全国计算机等级考试(ncre)的持续发展,ncre的合格证书已被各 ...

  6. 计算机专业要微机实验,南昌大学计算机专业微机原理实验二

    六.实验说明: (1)本实验是用74LS245读入开关状态,并用74LS273输出.74LS245和74LS273的端口分别为0A000H 和0B000H .相应的片选信号为YC2和YC3.在输出/输 ...

  7. 计算机组成原理 GPT原理

    GPT分区:全称为Globally Unique Identifier Partition Table,也叫做GUID分区表,它是UEFI 规范的一部分.由于硬盘容量的急速增长,MBR的2.2T容量难 ...

  8. 作业系统--13秋《微型计算机原理及其接口技术》作业1,微机原理与接口技术-中国大学mooc-题库零氪...

    第1章 计算机基础知识 第1节 计算机中数值数据的表示随堂测验 1.将二进制数1010101101.1转换成十六进制数为 . A.2AD.1H B.2AC.8 C.2AC.4 D.2AD.8 2.与十 ...

  9. 计算机组成原理+左冬红,计算机组成原理与接口技术--基于MIPS架构(第2版高等学校电子信息类专业系列教材)...

    导语 内容提要 华中科技大学电子信息与通信学院基于FPGA平台的"微机原理与接口技术"课程教学改革已进行数载,作者在总结教学经验基础上,对<计算机组成原理与接口技术>进 ...

最新文章

  1. scala mysql bit_Scala连接mysql数据库
  2. __getattr__ 与动态属性
  3. 后端码农谈前端(CSS篇)第三课:选择器
  4. yii2和laravel比较
  5. HDU 1294 Rooted Trees Problem
  6. 磁盘文件读写和数据库读写哪个效率更高
  7. faster-rcnn系列学习之准备数据
  8. ListView排序并隔色显示
  9. 百度人脸识别技术应用004---利用百度云离线SDK例子程序百度在线人脸库人脸识别接口_实现在线人脸识别
  10. java实现带logo的二维码
  11. Intel IOMMU Introduction
  12. 计算机键盘上删除,电脑哪个是删除键
  13. Flink StreamingFileSink写入hdfs,文件一直处于inprogress
  14. Designing Network Design Spaces论文导读
  15. Elasticsearch02
  16. HTML+CSS+JS 制作简单动漫网页
  17. iOS/MAC 数据压缩与解压缩及常用算法 LZMA、ZLIB
  18. 探索翻译后修饰(PTMs) 的新工具 | MedChemExpress
  19. HTML5期末作业:明星网站设计与实现——明星薛之谦介绍网页设计7个页面HTML+CSS+JavaScript
  20. sci-ei求中啊啊啊

热门文章

  1. 重提公平,对互联网意味什么?
  2. python:实现从img及其坐标中提取文本(附完整源码)
  3. bookstrap能编辑css吗,bootstrap的定制和修改
  4. vue 3 + antV s2表格可拖拽表格
  5. android手机怎么拆机,一加手机后盖怎么打开?一加手机更换后盖教程图文介绍...
  6. 爬虫|用Python小数据分析bilibili鬼畜巨头波澜哥(●'◡'●)
  7. Python爬虫入门教程 100-100 我用了800天,才成为爬虫领域的一个新人
  8. 你的手机支持无线充电吗?2个优势+4个缺陷,你会如何选择
  9. dnf服务器未响应怎么解决方法,玩dnf经常未响应怎么处理?玩dnf未响应的详细解决方法...
  10. 金融数字化大大拓宽了金融服务的范围,将长尾人群纳入其中