《计算机综合课程设计(三).ppt》由会员分享,可在线阅读,更多相关《计算机综合课程设计(三).ppt(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.1计算机系统综合课程设计计算机系统综合课程设计基于基于MIPS32的的SOC设计实践设计实践(下下)(Verilog+Quartus+Cyclone版版)主讲主讲杨全胜杨全胜东南大学计算机科学与工程学院东南大学计算机科学与工程学院教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.2第第3章章 外围电路及控制系统设计外围电路及控制系统设计n为为MiniSys加加I/O功能功能n16位定时位定时/计数器计数器n16位脉冲宽度调制位脉冲
2、宽度调制PWMn44键盘扫描电路键盘扫描电路n4位位7段段LED显示控制显示控制n简单简单UART控制控制n看门狗控制看门狗控制n中断的设计中断的设计教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.3为为MiniSys加加I/O功能(功能(1)nMiniSys为为I/O统一编址方式。统一编址方式。n将将DATA RAM地址分区,其中高地址分区,其中高256个个字节用来做字节用来做IO,一共是,一共是128个个16位端口。位端口。0000H4KBRAM0FFFHFFFFHFF00H256BYTE教育部教育部教育部教育部-英特尔精品课程英
3、特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.4为为MiniSys加加I/O功能(功能(2)nIO端口地址分配原则(可自行决定)端口地址分配原则(可自行决定)n将将8根根IO端口线(端口线(16位地址线的低位地址线的低8位,高位,高8位为全位为全1)的高)的高4位用来译码得到最多位用来译码得到最多16个个接口电路的片选信号。接口电路的片选信号。n低低4位组成每个接口电路的位组成每个接口电路的16个字节端口地个字节端口地址,由于址,由于Minisys只有只有16位数据处理能力。位数据处理能力。所以每个接口电路实际上是有所以每个接口电路实际上是有8个字端口地个字端口地址。址。教
4、育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.5为为MiniSys加加I/O功能(功能(3)n对对MiniSys的修改的修改n修改修改MemWrite和和MemRead信号的逻辑。增加信号的逻辑。增加IORead和和IOWrite信号,改信号,改MemtoReg为为MemorIOtoReg。assign RegWrite=(R_format|Lw|Jalc|I_data)&!(Jrn);/需要写寄存器的指令需要写寄存器的指令 assign MemWrite=(Sw=1)&(ImmediatHigh9:2!=8b11111111)?1:
5、0;/写存储器,写存储器,ImmediatHigh9:0 是新增的输入信号是新增的输入信号=instructions15.6 assign MemRead=(Lw=1)&(ImmediatHigh9:2!=8b11111111)?1:0;/读存储器读存储器 assign MemorIOtoReg=IORead|MemRead;/读操作需要从端口或存储器读数据到寄存器读操作需要从端口或存储器读数据到寄存器 assign IOWrite=(Sw=1)&(ImmediatHigh9:2=8b11111111)?1:0;/写端口写端口 assign IORead =(Lw=1)&(ImmediatHi
6、gh9:2=8b11111111)?1:0;/读端口读端口,ImmediatHigh9:0 就是就是instructions15:6教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.6为为MiniSys加加I/O功能(功能(4)n增加一个增加一个MEMorIO模块模块运算运算单元单元存储存储单元单元译码译码单元单元Addresswdatardata教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.7为为MiniSys加加I/O功能(功能(5)n增加一个增加一个MEMorIO模块模
7、块运算运算单元单元存储存储单元单元译码译码单元单元mAddressMEMorIOAddressPortNumbermrdataIrdatardatawdataiwdatamwdata片选信号片选信号片选信号片选信号注意它注意它教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.8为为MiniSys加加I/O功能(功能(6)片选信号片选信号首地址首地址LEDCtrlFF00HKEYCtrlFF10HCTCCtrlFF20HPWMCtrlFF30HUARTCtrlFF40HWDTCtrlFF50H具体端口分配具体端口分配教育部教育部教育部教育
8、部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.916位定时位定时/计数器(计数器(1)n功能功能n两个定时两个定时/计数器计数器CNT0和和CNT1。n具有计数和定时两个功能。具有计数和定时两个功能。n计数方式下可以对输入的外部脉冲进行计数,计数方式下可以对输入的外部脉冲进行计数,当计数到初值寄存器的值的时候,设置状态当计数到初值寄存器的值的时候,设置状态寄存器的相应位。寄存器的相应位。n定时方式下,在时钟作用下计时器做减定时方式下,在时钟作用下计时器做减1,到到1的时候设置状态寄存器的相应位,并在的时候设置状态寄存器的相应位,并在相应的相应的COUT脚
9、输出一个时钟的低电平(平脚输出一个时钟的低电平(平时时COUT是高电平)。是高电平)。n状态寄存器在被读取后被清零。状态寄存器在被读取后被清零。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.1016位定时位定时/计数器(计数器(2)nCNT0方式寄存器(方式寄存器(FF20H)nCNT1方式寄存器(方式寄存器(FF22H);两个寄存器均为只可写;两个寄存器均为只可写 0150:0:定时定时定时定时1:1:计数计数计数计数0:0:非循环非循环非循环非循环1:1:循环循环循环循环1教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英
10、特尔精品课程英特尔精品课程2022/12/23 P.1116位定时位定时/计数器(计数器(3)nCNT0状态寄存器(状态寄存器(FF20H)nCNT1状态寄存器(状态寄存器(FF22H);两个寄存器均为只可读,读取后被清;两个寄存器均为只可读,读取后被清0 0151:定时到定时到1:计数到计数到10:0:定时定时定时定时/计数未开始计数未开始计数未开始计数未开始1:1:定时定时定时定时/计数开始计数开始计数开始计数开始教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.1216位定时位定时/计数器(计数器(4)nCNT0初值寄存器初值寄存
11、器(O)/当前值寄存器当前值寄存器(I)(FF24H)nCNT1初值寄存器初值寄存器(O)/当前值寄存器当前值寄存器(I)(FF26H)015两个寄存器通过读两个寄存器通过读/写线区别写线区别教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.1316位定时位定时/计数器(计数器(5)n输入输出安排输入输出安排nrdata15rdata0(O)用于用于CPU读数据读数据nwdata15wdata0(I)用于用于CPU写数据写数据nCS(I)片选端片选端nCLK(I)时钟信号时钟信号nReset(I)复位信号)复位信号npulse0,pul
12、se1(I)两个)两个CNT的外部脉冲信号的外部脉冲信号naddress3address0(I)端口地址)端口地址nIOW(I)写信号)写信号nIOR(I)读信号)读信号nCOUT0,COUT1(O)定时)定时/计数器输出计数器输出教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.14脉冲宽度调制脉冲宽度调制PWM(1)n功能功能n内部一个内部一个16位计数器和一个位计数器和一个16位对比值,位对比值,计数器周而复始的加计数器周而复始的加1计数,计数到计数器计数,计数到计数器的最大值(默认为的最大值(默认为FFFFH)的时候转为)的时候
13、转为0再再计数。当计数器的值大于对比值,输出端计数。当计数器的值大于对比值,输出端输出低电平,否则输出高电平。输出低电平,否则输出高电平。n对比值(默认为对比值(默认为7FFFH)的不同决定了输)的不同决定了输出脉冲的占空比。出脉冲的占空比。n计数器的最大值可以由软件设定,以便确计数器的最大值可以由软件设定,以便确定定PWM的输出脉冲的调制频率。的输出脉冲的调制频率。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.15脉冲宽度调制脉冲宽度调制PWM(2)n输入输出安排输入输出安排nRESET(I)初始化初始化naddress2addr
14、ess0(I)端口地址)端口地址nD15D0(I)用于写入对比值和最大值用于写入对比值和最大值nCS(I)片选端片选端nCLK(I)时钟信号时钟信号nIOW(I)写信号)写信号nPWM(O)输出端)输出端教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.16脉冲宽度调制脉冲宽度调制PWM(3)n内部寄存器内部寄存器n最大值寄存器(最大值寄存器(FF30H)(只写)(只写)n对比值寄存器(对比值寄存器(FF32H)(只写)(只写)n使能寄存器(使能寄存器(FF34H)(只写)(只写)015默认为默认为00:不许输出脉冲不许输出脉冲1:允许
15、输出脉冲允许输出脉冲教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.1744键盘扫描电路设计(键盘扫描电路设计(1)n功能功能自动扫描自动扫描44的键盘,当有键按下的键盘,当有键按下的时候扫描键值,将键值记录到键值的时候扫描键值,将键值记录到键值寄存器,并置位状态寄存器中的寄存器,并置位状态寄存器中的“有有键键”标志。当标志。当CPU读出键值后,将读出键值后,将“有键有键”标志清除。标志清除。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.1844键盘扫描电路设计(键盘扫描电
16、路设计(2)n输入输出安排输入输出安排nD15D0(O)用于读出数据用于读出数据nCS(I)片选端片选端nCLK(I)时钟信号时钟信号nline3line0(I)键盘行输出线)键盘行输出线ncol3col0(O)键盘列输入线)键盘列输入线naddress1address0(I)端口地址)端口地址nIOR(I)读信号)读信号教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.1944键盘扫描电路设计(键盘扫描电路设计(3)n内部寄存器内部寄存器n键值寄存器(键值寄存器(FF10H)(只读)(只读)n状态寄存器(状态寄存器(FF12H)(只读
17、)(只读)0150:无键无键1:有键有键教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.204位位7段段LED显示控制显示控制(1)n功能功能通过向该控制电路写通过向该控制电路写16位数据,经位数据,经过译码控制共阳极的过译码控制共阳极的7段段LED显示。显示。16位数每半个字节控制一位位数每半个字节控制一位7段段LED,从高位到地位排列。,从高位到地位排列。015LED0LED1LED2LED3教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.214位位7段段LED显示控制显
18、示控制(2)n7段共阳极段共阳极LED需要点亮的笔画需需要点亮的笔画需要输出要输出0。n将将ag分别接输出分别接输出的的7位数据的位位数据的位0位位6abcdefg教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.224位位7段段LED显示控制显示控制(3)n输入输出安排输入输出安排nReset(I)初始化初始化nD15D0(I)用于写数据用于写数据nCS(I)片选端片选端nIOW(I)写信号)写信号nled00led06 0位位led输出线输出线nled10led16 1位位led输出线输出线nled20led26 2位位led输出线
19、输出线nled30led36 3位位led输出线输出线n内部寄存器内部寄存器n数据锁存器(数据锁存器(FF00H)教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.23简单简单UART控制(控制(1)n功能功能负责控制将负责控制将CPU来的来的8位数据并转串,位数据并转串,然后按照异步串行通信数据格式输出,然后按照异步串行通信数据格式输出,将串口来的将串口来的8位串行数据串转并,并位串行数据串转并,并在在CPU请求的时候输入给请求的时候输入给CPU。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程202
20、2/12/23 P.24简单简单UART控制(控制(2)n设计时注意事项设计时注意事项nXTAL可以是单独的时钟信号,和系统的可以是单独的时钟信号,和系统的CLK不一不一样。样。n假设外部时钟假设外部时钟XTAL的频率是波特率的的频率是波特率的16倍(本倍(本设计采用固定波特率设计采用固定波特率9600b/s)n接收器接收数据的采样率也是波特率的接收器接收数据的采样率也是波特率的16倍(既倍(既XTAL频率)采用中间值采样的原则,也就是一个频率)采用中间值采样的原则,也就是一个数据位占数据位占16个接收时钟宽度,在第个接收时钟宽度,在第8个时钟的时个时钟的时候采样。候采样。n数据格式固定为数据
21、格式固定为1位起始位,位起始位,8位数据位和位数据位和1位停位停止位。起始位为止位。起始位为0,停止位为,停止位为1。串行输出线空闲。串行输出线空闲状态为状态为1。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.25简单简单UART控制(控制(3)n输入输出安排输入输出安排nrdata7rdata0(O)用于用于CPU读数据读数据nwdata7wdata0(I)用于用于CPU写数据写数据nCS(I)片选端片选端nXTAL(I)外部时钟信号外部时钟信号nTxD(O)串行输出)串行输出nRxD(I)外部串行输入)外部串行输入naddres
22、s2address0(I)端口地址)端口地址nIOW(I)写信号)写信号nIOR(I)读信号)读信号nRESET(I)复位信号)复位信号教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.26简单简单UART控制(控制(4)n内部寄存器内部寄存器n输出锁存器(输出锁存器(FF40H)(只用)(只用8位)位)n输入缓冲器(输入缓冲器(FF40H)(只用)(只用8位)位)n状态寄存器(状态寄存器(FF42H)0151:输出完输出完1:输入完输入完状态寄存器在读出输入缓冲器后清状态寄存器在读出输入缓冲器后清D1位,在写入输位,在写入输出锁存器后
23、清出锁存器后清D0位。位。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.27看门狗电路(看门狗电路(1)n功能功能n内含一个内含一个16位定时器,系统复位后计数值位定时器,系统复位后计数值为为FFFFH,之后每时钟计数值减,之后每时钟计数值减1,当减到,当减到0的时候,向的时候,向CPU发发4个时钟周期的个时钟周期的RESET信号,同时计数值恢复到信号,同时计数值恢复到FFFFH并继续计并继续计数。数。n通过软件不断地定期写看门狗端口来复位看通过软件不断地定期写看门狗端口来复位看门狗,使计数器重新从门狗,使计数器重新从FFFFH开始
24、计数。开始计数。n注意增加看门狗电路后,注意增加看门狗电路后,CPU的的RESET输输入脚应该是系统复位信号和看门狗发出的复入脚应该是系统复位信号和看门狗发出的复位信号的组合。位信号的组合。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.28看门狗电路(看门狗电路(2)n输入输出安排输入输出安排nwdata7wdata0(I)用于用于CPU写数据写数据nCS(I)片选端片选端nCLK(I)外部时钟信号外部时钟信号nRST(O)输出给)输出给CPU的复位信号的复位信号nIOW(I)写信号)写信号nRESET(I)系统复位信号)系统复位信
25、号教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.29看门狗电路(看门狗电路(3)n内部逻辑内部逻辑只要只要CS,IOW同时有效,看门狗电同时有效,看门狗电路就被复位,看门狗电路访问的端口路就被复位,看门狗电路访问的端口地址是地址是FF50H教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.30中断的设计(中断的设计(1)n为为Minisys增加两个中断功能增加两个中断功能中中断断0和中断和中断1,中断,中断0优先级大于中断优先级大于中断1,不支持同级中断嵌套。,不支持同级中断
26、嵌套。n将将$26和和$27设计为两个中断返回地设计为两个中断返回地址存放寄存器,分别在中断址存放寄存器,分别在中断0和中断和中断1到来的时候存放返回地址。它们分到来的时候存放返回地址。它们分别称为别称为$i0和和$i1。这两个寄存器也。这两个寄存器也改为系统寄存器,用户不可访问。改为系统寄存器,用户不可访问。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.31中断的设计(中断的设计(2)n增加一个中断屏蔽寄存器增加一个中断屏蔽寄存器IMASKR。0150:允许中断允许中断01:屏蔽中断屏蔽中断00:允许中断允许中断11:屏蔽中断屏蔽
27、中断1 这两位的置和清由硬件自动实现,当中断到这两位的置和清由硬件自动实现,当中断到来,跳转到服务子程序的时候置位,执行来,跳转到服务子程序的时候置位,执行jr$i0或或jr$i1的时候清相应的位。的时候清相应的位。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.32中断的设计(中断的设计(3)n中断处理中断处理n中断向量的制定中断向量的制定将将4KB 程序程序ROM的的FF8HFFBH作为中断作为中断0的向量,的向量,FFCHFFFH作为中断作为中断1的向量。的向量。用户程序应该在这两个地址放上用户程序应该在这两个地址放上j语句,跳
28、语句,跳转到真正的中断处理程序入口,如果没有中转到真正的中断处理程序入口,如果没有中断处理程序,也要分别放上断处理程序,也要分别放上jr$i0和和jr$i1教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.33中断的设计(中断的设计(4)n中断处理中断处理n中断响应的过程中断响应的过程1)将下一条指令的)将下一条指令的PC值存放到值存放到$i0或或$i12)设置)设置IMASKR的相应位,屏蔽有关中断的相应位,屏蔽有关中断3)跳转到)跳转到FF8或或FFCn中断返回过程(对中断返回过程(对jr$i0和和jr$i1的处理)的处理)1)清)
29、清IMASKR的相应位,打开有关中断的相应位,打开有关中断2)执行)执行jr$i0或或jr$i1教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.34中断的设计(中断的设计(5)n中断处理中断处理n中断优先权中断优先权中断中断0优先于中断优先于中断1,当两个中断同时到来,当两个中断同时到来,先处理中断先处理中断0。n中断嵌套中断嵌套不允许同级中断嵌套,中断不允许同级中断嵌套,中断0可以嵌套在中可以嵌套在中断断1中,也就是说中断中,也就是说中断0能够中断中断能够中断中断1的处的处理程序。理程序。教育部教育部教育部教育部-英特尔精品课程英特
30、尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.35中断的设计(中断的设计(6)n中断请求信号中断请求信号n中断请求信号源中断请求信号源CTC16、KEY16、UART均可以发中断请均可以发中断请求,可自选两个改成中断方式。求,可自选两个改成中断方式。n中断请求信号属性中断请求信号属性尽量采用电平触发,而且尽量使用多时钟周尽量采用电平触发,而且尽量使用多时钟周期的高电平触发。这样可以避免干扰信号的期的高电平触发。这样可以避免干扰信号的误判。多时钟周期高电平的实现可以考虑使误判。多时钟周期高电平的实现可以考虑使用一个时钟计数器和状态机。用一个时钟计数器和状态机。教育部教育部教育部
31、教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.36第第4章章 软件设计软件设计n伪指令伪指令n堆栈的实现堆栈的实现n汇编编译程序汇编编译程序n测试与应用程序测试与应用程序教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.37伪指令伪指令(1)n绝对地址定义绝对地址定义nORG_DATA 32位数据区双字地址位数据区双字地址定义下一语句在数据定义下一语句在数据RAM中的绝对地址。中的绝对地址。例:例:ORG_DATA 0000 buf DD 0000ffff,55aa1234;nORG_CODE
32、 32位代码区双字地址位代码区双字地址定义下一语句在程序定义下一语句在程序ROM中的绝对地址。中的绝对地址。例:例:ORG_CODE FF8 j int0教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.38伪指令(伪指令(2)n变量定义(仅支持变量定义(仅支持32位变量定义,用位变量定义,用十六进制表示值十六进制表示值,变量名就是地址)变量名就是地址)变量名变量名 DD 值值1,值值2,值值n(值都以(值都以16进制表示)进制表示)例如:例如:buf DD 0000ffff,55aa1234;lw$V0,buf($Zero);load
33、 0000FFFFn注释符注释符;英文的英文的注释文字注释文字教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.39伪指令(伪指令(3)n标号定义与使用(标号名是地址)标号定义与使用(标号名是地址)标号名标号名:语句语句例如:例如:int0:lw$t0,12($t1)j int0教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.40段定义伪指令(段定义伪指令(1)n数据段定义伪指令数据段定义伪指令DATA SEG ;数据段开始数据段开始DATA ENDS ;数据段结束数据段结束例
34、:例:DATA SEG ;数据段开始数据段开始buf DD 0000ffff,55aa1234DATA ENDS ;数据段结束数据段结束 教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.41段定义伪指令(段定义伪指令(2)n代码段定义伪指令代码段定义伪指令CODE SEG ;代码段开始代码段开始CODE ENDS ;代码段结束代码段结束例:例:CODE SEG ;数据段开始数据段开始lw$t0,buff($t1)CODE ENDS ;数据段结束数据段结束教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程
35、2022/12/23 P.42程序结束伪指令程序结束伪指令n格式格式END 标号标号注意这里的标号一定要在汇编程序中注意这里的标号一定要在汇编程序中出现过,程序结束伪指令不仅表明程出现过,程序结束伪指令不仅表明程序结束,更重要的是告诉汇编器,程序结束,更重要的是告诉汇编器,程序的第序的第1句是哪一句。因此这里的标句是哪一句。因此这里的标号应该是程序第号应该是程序第1句的标号。句的标号。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.43堆栈的实现(堆栈的实现(1)n使用数据使用数据RAM的一部分作为堆栈的一部分作为堆栈由于数据是由于数
36、据是32位位的,所以堆栈总共的,所以堆栈总共有有128个单元。个单元。堆栈的操作以及堆栈的操作以及堆栈越界检查全由堆栈越界检查全由软件实现。软件实现。0000H0FFFH0E00H512B堆栈堆栈3584B数据区数据区教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.44堆栈的实现(堆栈的实现(2)n堆栈操作(初始堆栈操作(初始$SP=0FFFH)压栈操作压栈操作出栈操作出栈操作sw$t0,0($sp)addi$sp,$sp,4addi$sp,$sp,-4lw$t0,0($sp)教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特
37、尔精品课程英特尔精品课程2022/12/23 P.45汇编编译程序(汇编编译程序(1)n目标目标将用将用MiniSys汇编语言编写的汇编语言编写的MiniSys程序(含伪指令)编译成程序(含伪指令)编译成.mif文件,其中代码部分编译成文件,其中代码部分编译成prgmip32.mif,数据部分编译成,数据部分编译成dmem32.mif。注意注意mif文件中不要出现任何中文,文件中不要出现任何中文,包括注释中也不要用中文。包括注释中也不要用中文。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.46汇编编译程序(汇编编译程序(2)n要求要
38、求n编译结果正确,格式正确。具有错误报告功能,编译结果正确,格式正确。具有错误报告功能,可定位到错误语句的行。可直接用于可定位到错误语句的行。可直接用于Quartus II中进行芯片编译。中进行芯片编译。n在在prgmip32.mif中,对于每条翻译过的指令码,中,对于每条翻译过的指令码,用注释的方法将源代码及源代码后的注释附在后用注释的方法将源代码及源代码后的注释附在后面以便调试的时候对照。面以便调试的时候对照。(不能用中文)(不能用中文)n编译程序可以用编译程序可以用C、C+、JAVA、DELPHI、Power Builder等任何一种语言来实现。等任何一种语言来实现。nMiniSys汇编
39、指令书写格式参见指令系统的指令汇编指令书写格式参见指令系统的指令举例,汇编程序书写格式见后。举例,汇编程序书写格式见后。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.47汇编编译程序(汇编编译程序(3)ORG_DATA 0000 ;The start address of dataBUF DD 000000FF,55005500ORG_CODE 0000;The start address of codestart:addi$t0,$Zero,0 ;A label for the first statement,$t0=0 lw$v
40、0,buf($t0);$v0=000000FF (buf0)addi$t0,$t0,4 lw$v1,buf($t0);$v1=55005500 (buf4)add$v0,v0,v1 ;$v0=$v0+$v1=550055FF addi$t0,$t0,4 sw$v0,buf($t0);buf8=550055FF j startend start ;The label for end statement is as the same as the one for the first statement.nMiniSys汇编程序书写格式举例汇编程序书写格式举例教育部教育部教育部教育部-英特尔精品课程
41、英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.48汇编编译程序(汇编编译程序(4)nprgmip32.mif文件文件DEPTH=1024;-10 bits of data line,2101024WIDTH=32;-the width of data is 32 bitsADDRESS_RADIX=HEX;-describe address in hex DATA_RADIX=HEX;-describe data in hex CONTENTBEGIN0:8c020000;-lw$2 0($0)1:8c030002;-lw$3 2($0)2.3FD:00000000;3F
42、E:01800008;-jr$i0 ;(jr$26)3FF:01C00008;-jr$i1;(jr$27)END;教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.49汇编编译程序(汇编编译程序(5)ndmem32.mif文件文件DEPTH=1024;-10 bits of data line,2101024WIDTH=32;-the width of data is 32 bitsADDRESS_RADIX=HEX;-describe address in hex DATA_RADIX=HEX;-describe data in he
43、x CONTENTBEGIN0:00000055;1:000000AA;2.3FF:0000;END;教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.50汇编编译程序(汇编编译程序(6)n注意地址对应关系注意地址对应关系n对于代码部分对于代码部分ORG_CODE的翻译的翻译源程序的代码部分源程序的代码部分ORG_CODE后的地址是后的地址是实际的实际的32位位双字地址双字地址,而在,而在prgmip32.mif中中的地址是实际双字地址的地址是实际双字地址除以除以4后取低后取低10位的位的结果。也就是结果。也就是address11.2。
44、例如:例如:ORG_CODE 0FF8 jr$i0应该翻译为应该翻译为 3FE:01800008;-jr$i0 翻译后的地址翻译后的地址 翻译后的指令翻译后的指令翻译前的地址翻译前的地址教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.51汇编编译程序(汇编编译程序(7)n注意地址对应关系注意地址对应关系n对于数据部分对于数据部分ORG_DATA的翻译的翻译源程序的数据部分源程序的数据部分ORG_DATA后的地址是实际的后的地址是实际的32位位双字地址双字地址,而在,而在dmem16.mif中的地址是实际中的地址是实际双字节地址双字节地
45、址除以除以4后取低后取低10位的结果。也就是位的结果。也就是address11.2。例如:例如:ORG_DATA 0004 sum DD 0000ffff,55aa1234;应该翻译成:应该翻译成:1:0000ffff;2:55aa1234;翻译后的地址翻译后的地址翻译前的地址翻译前的地址教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.52汇编编译程序(汇编编译程序(8)n变量和标号的处理变量和标号的处理对于变量和标号,要建立相关的符号对于变量和标号,要建立相关的符号表,表中给出变量和标号和实际地址表,表中给出变量和标号和实际地址的对
46、应关系。对于标号,必要的时候的对应关系。对于标号,必要的时候可通过两遍扫描来获得地址。对于标可通过两遍扫描来获得地址。对于标号的使用,使用实际地址还是实际地号的使用,使用实际地址还是实际地址右移两位的值,需要根据指令格式址右移两位的值,需要根据指令格式来决定。来决定。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.53测试与应用程序(测试与应用程序(1)n功能功能n实现对各类指令的测试(包括对编译程序的实现对各类指令的测试(包括对编译程序的测试和对测试和对MinisysCPU模块功能的测试)模块功能的测试)n实现对硬件接口各个部件的测
47、试实现对硬件接口各个部件的测试n实现简单的实现简单的BIOSn实现一个简单的应用实现一个简单的应用测试功能、测试功能、BIOS及应用功能可以在不同的程序中。及应用功能可以在不同的程序中。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.54测试与应用程序(测试与应用程序(2)n测试程序测试程序各类测试程序可以单独编写,部分早各类测试程序可以单独编写,部分早期的测试程序可以直接用目标代码来期的测试程序可以直接用目标代码来写。测试验证的时候要配合使用写。测试验证的时候要配合使用Quartus II的相关功能,也可将的相关功能,也可将CPU单
48、独进行测试,并将一些关键的单独进行测试,并将一些关键的中间信号输出出来调试。中间信号输出出来调试。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.55测试与应用程序(测试与应用程序(3)n简单简单BIOS要求将一些功能做成要求将一些功能做成BIOS功能调用,功能调用,调用参数大家可以自己定。调用参数大家可以自己定。nKEY16调用调用主要有获取键值、判断有无键按下两个功能。主要有获取键值、判断有无键按下两个功能。nLED16调用调用主要是按参数输出主要是按参数输出LED字符,可以是四个字符字符,可以是四个字符一起输出,或单独一个或几个
49、字符输出一起输出,或单独一个或几个字符输出n异步串行调用异步串行调用主要是输出数据和读取数据两个功能主要是输出数据和读取数据两个功能教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.56测试与应用程序(测试与应用程序(4)n编写编写BIOS的时候注意,在的时候注意,在RAM中划分出中划分出一部分空间作为一部分空间作为BIOS程序内部使用,并程序内部使用,并公布这些地址,预防用户重用。公布这些地址,预防用户重用。n作为系统功能调用的作为系统功能调用的BIOS程序要注意保程序要注意保护好寄存器的值,不能改变用户程序中护好寄存器的值,不能改变用户程序中的寄存器值,除非该寄存器作为出口参的寄存器值,除非该寄存器作为出口参数。数。教育部教育部教育部教育部-英特尔精品课程英特尔精品课程英特尔精品课程英特尔精品课程2022/12/23 P.57测试与应用程序(测试与应用程序(5)n应用程序应用程序自行设计一个应用程序,以便展示本组自行设计一个应用程序,以便展示本组设计的设计的SOC芯片的功能。比如时钟显示、芯片的功能。比如时钟显示、可用交互方式改变输出脉冲宽度的可用交互方式改变输出脉冲宽度的PWM等,必须使用自己定义的等,必须使用自己定义的BIOS功能调用。功能调用。
限制150内