8051说明书

8051说明书

2023年7月17日发(作者:)

目录

简介........................................................................................................................ 2

DW8051的特性............................................................................................. 2

软件兼容性.................................................................................................... 2

可配置性........................................................................................................ 2

接口引脚描述........................................................................................................ 3

DW8051的配置..................................................................................................... 6

Dw8051与内存的连接 ......................................................................................... 7

DW8051内存组织架构................................................................................. 7

DW8051与内部RAM的连接....................................................................... 7

DW8051与内部ROM的连接 ...................................................................... 9

DW8051与外部RAM/ROM相连 ............................................................... 10

DW8051与其他IP的连接 ................................................................................. 11

KEIL51的使用指南 .............................................................................................. 12

简介.............................................................................................................. 12

编译.............................................................................................................. 12

仿真调试...................................................................................................... 15

DW8051在Modelsim中的仿真 ........................................................................ 18

Testbench的编写 ........................................................................................ 18

ROM的仿真 ................................................................................................ 18

RAM的仿真................................................................................................. 22

简介

DW8051的特性

DW8051是由Synopsys提供的可综合的微控制器IP核。它与INTEL的标准8051相兼容,采用了新的外部接口,更易于SOC集成。其特性如下:

 与标准的51的兼容:

 支持标准的51指令集

 可选的串口

 可选的第三个timer(标准8051为2个)

 可选的标准8051的I/O接口

比标准51更高的性能:

 1条指令耗费4个时钟周期(标准51为12个时钟周期)

 相同频率下,平均速度为标准51的2.5倍

 在DC下综合可达250Mhz(需要0.13的工艺)

 可配置外部rom的大小

 可通过SFR总线连接外部设备IP

 16位的外部SFR寻址空间

 支持标准的8051的软件开发调试工具。

软件兼容性

DW8051兼容绝大部分标准51软件,但是由于DW8051执行指令的时间与标准51不同,因此使用loop来进行精确延时的程序需要作出修改。

可配置性

中断数量为6个(标准8051)或者13个(与Dallas DS80C320相同)

内部RAM可配置为128 bytes或256 bytes

0-64k bytes 外部rom

0-2个串口

2-3个Timer

接口引脚描述

DW8051采用了与标准8051不同的外部接口,新的接口更利于SOC集成,接口信号如图2.1。

图2.1 DW8051的外部接口

引脚名称

Clk

Por_n

Rst_in_n

Rst_out_n

Stop_mode_n

Idle_mode_n

Test_mode_n

Sfr_addr

Sfr_data_out

Sfr_data_in

Sfr_wr

Sfr_rd

Mem_addr

Mem_data_out

Mem_data_in

Mem_wr_n

Mem_rd_n

Mem_pswr_n

Men_psrd_n

Mem_ale

Mem_ea_n

Iram_addr

Iram_data_in

Iram_data_out

Iram_rd_n

Iram_we1_n

Iram_we2_n

Irom_addr

Irom_data_out

Irom_rd_n

Irom_cs_n

Port_pin_reg_n

P0_mem_reg_

位宽

1

1

1

1

1

1

1

8

8

8

1

1

16

8

8

1

1

1

1

1

1

8

8

8

1

1

1

16

8

1

1

1

1

输入/输出

In

In

In

Out

Out

Out

In

Out

Out

In

Out

Out

Out

Out

In

Out

Out

Out

Out

Out

In

Out

Out

In

Out

Out

Out

Out

In

Out

Out

Out

Out

描述

输入时钟信号,DW8051所有内部寄存器都是下降沿触发

启动reset,低电平有效,至少维持2个时钟周期

标准8051 reset,低电平有效,至少维持8个时钟周期

输出reset信号,为por_n与rst_in_n信号的相与

指示DW8051进入stop模式,只有reset能退出stop模式

指示DW8051进入idle模式,reset或者中断信号可以退出idle模式

进入test模式,通常情况下必须置高

外部设备总线地址

对外部设备数据输出

来自外部设备的数据输入

外部设备总线写指示信号

外部设备总线读指示信号

外部RAM和ROM的地址

对外部RAM的数据输出

来自外部RAM/ROM的数据输入

外部RAM的写指示信号

外部RAM的读指示信号

外部ROM写控制信号,用于对FLASH进行升级

外部ROM读指示信号

内部ROM有效信号,为1则指令从内部ROM开始执行,为0则直接从外部ROM开始执行

内部RAM地址信号

输出到内部RAM数据信号

来自内如RAM的数据信号

内部RAM的读指示信号

内部RAM的写指示信号,为0表示写的地址有效

内部RAM的写指示信号,为0表示写的数据有效

内部ROM的地址信号

来自内部ROM的数据信号

内部ROM的读指示信号,地址直接驱动的ROM则此信号不使用

内部ROM的片选信号,地址直接驱动的ROM则此信号不使用

使用标准8051 I/O接口时的读选择信号,使用SOC接口时此信号不使用

使用标准8051 I/O接口时端口组0输出寄存器和地址/ n

P0_addr_data_n

P2_mem_reg_n

Int0_n

Int1_n

Int2

Int3_n

Int4

Int5_n

Pfi

wdti

T0

T1

T2

T2ex

T0_out

T1_out

T2_out

Rxd0_in

Rxd0_out

Txd0

Rxd1_in

Rxd1_out

Txd1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

Out

Out

In

In

In

In

In

In

In

In

In

In

In

In

Out

Out

Out

In

Out

Out

In

Out

Out

数据选择信号,使用SOC接口时此信号不使用

使用标准8051 I/O接口时端口组0的输出地址和输出数据选择信号,使用SOC接口时此信号不使用

使用标准8051 I/O接口时端口组2输出寄存器和地址/数据选择信号,使用SOC接口时此信号不使用

外部中断0,低电平有效,可设置为电平触发或者边沿触发

外部中断1,低电平有效,可设置为电平触发或者边沿触发

外部中断2,高电平有效,边沿触发

外部中断3,低电平有效,边沿触发

外部中断2,高电平有效,边沿触发

外部中断3,低电平有效,边沿触发

Power-fail中断,高电平有效,电平触发

Watchdog-timer中断,高电平有效,边沿触发

定时器0输入

定时器1输入

定时器2输入

定时器2重载输入

定时器0输出

定时器1输出

定时器2输出

串口0输入

串口0输出

串口0输出

串口1输入

串口1输出

串口1输出

DW8051的配置

DW8051可以通过DW8051_parameter.v进行配置,具体的设置如下:

参数 功能 取值范围

Ram_256 内置RAM的大小,0为128 Bytes,0 or 1

1为256 Bytes

Timer2 定时器2是否存在,0为不存在,10 or 1

为存在

Rom_addr_size 内部ROM大小 0-16

Serial 串口数,0为没有串口,1为有一个0,1 or 2

串口,2为有2个串口

Extd_intr 是否使用额外的中断,0为不使用0 or 1

(6个标准中断),1为使用(13个中断)

Dw8051与内存的连接

DW8051内存组织架构

DW8051内存分为ROM和RAM,其中ROM为存储指令,RAM为程序运行过程中存储变量等,RAM/ROM又分为内部与外部。

内部RAM为128/256 Bytes,与CPU通过IRAM总线相连

内部ROM最高支持64K Bytes,与CPU通过IROM总线相连

外部RAM/ROM最高支持64K Bytes,都是通过Mem总线与CPU相连,通过RAM读写控制信号与ROM控制信号不同来区别

具体分布如图2

图2 DW8051的内存分布

DW8051与内部RAM的连接

DW8051同时支持同步和异步RAM,同步RAM是指读写均需要时钟沿触发的RAM,而异步RAM读不需要时钟沿,给出地址后马上可以得到数据,其中与异步RAM的连接如图3。

图3 DW8051与异步RAM的连接

需要注意的是,因为DW8051都是低电平触发,因此输入的CLK信号需要取反

异步RAM的读写时序如图4

图4 异步RAM的读写时序

同步RAM的连接如图5

图5 同步RAM与DW8051的连接

同样需要注意的是,ram的we接口连接的是WE2信号而不是WE1信号,并且CLK信号和WE2信号都需要取反,否则CPU会读取错误

同步RAM的读写时序图6

图6 同步RAM的读写时序

DW8051与内部ROM的连接

DW8051与内部ROM的连接与内部RAM相似,具体时序如下:

图7 与内部ROM相连

DW8051与外部RAM/ROM相连

DW8051与外部RAM/ROM都是通过MEM总线相连,因此如果同时使用外部ROM/RAM,则应使用解码器来判断访问的是RAM还是ROM,如图8

图8 DW8051与外部ROM/RAM的连接

DW8051与其他IP的连接

DW8051与其他的IP通过SFR总线连接,sfr总线有8位的地址空间,但是其中一部分被DW8051内部的模块如定时器,串口等占据,可供用户定义使用的如图9

图9 可供用户使用的SFR地址

DW8051与外部IP的连接如图10

图10 DW8051与外部IP的连接

KEIL51的使用指南

简介

KEIL51是针对8051的集成开发环境,包括了编译器,调试器和仿真器,支持C语言和51汇编语言,目前使用的是Uvision3 的版本。

编译

安装完成后,选择New Project新建工程项目。

在处理器选择时,选择DW8051

双击左边的项目名称,可向其中添加源程序代码(C语言或者汇编程序)

在选项中,可以对编译选项进行具体的设置

选择“option for target”

Xtal为仿真的频率,只是仿真的时候使用,具体硬件实现时没有影响

Memory Model根据需要选择,samll 只使用内置ram存放变量,但是速度较快,compact和Large使用外部ram存放变量,但是速度较慢,根据程序不同,如果变量较多而使用small模式的话编译时会提示错误,这时需要将其设置为Large模式编译。

在output选项中,注意将create hex file选项打上勾,这样编译后会产生.hex文件,供仿真使用。

仿真调试

选择start debug进入调试环境

左边的reg可以看到所有内部寄存器的值

点击左上角按钮可以进行单步连续等运行

此按钮可以查看编译后的汇编代码

Symbels窗口可以查看各个函数和变量的信息

此按钮可以打开串口仿真窗口

printf函数在51上是通过串口实现的,所有打印的东西都通过串口发送,因此在testbench里需要将TI寄存器置一,然后可以再serial窗口中查看打印的数据。

DW8051在Modelsim中的仿真

Testbench的编写

DW8051以verilog代码的形式存在,其顶层文件和模块为DW8051_core,在testbench中引用这个模块,并将它与ram和rom相连,其中需要一些不用的信号需要置为0或者1,如中断信号,不要空着,否则仿真可能出错。

ROM的仿真

由于KEIL生成的机器码是以.hex文件存在的,在仿真中不能直接读取,因此需要采用一定的方法,使得仿真软件可以读取hex文件

有两种方法可以读取hex,一种是使用altera的插件,并使用altera的工具生成rom,在装有quartus的机器上,这种方法比较简单易行。并且可以直接在FPGA硬件上调试

第二种是采用一段verilog程序将.hex中的数据读入到寄存器堆中,用寄存器来仿真ram,这种方法在没有quartus的机器上可以用于仿真,但是不能在硬件上实现。

采用quartus的方法如下:

在quartus中选择megawizard plug-in manager

选择Memory complier中选择ram或者rom

点击next可以对rom和ram进行设置,其中第三步就是用hex文件对rom/ram进行初始化。

用quartus生成rom/ram之后,还不能直接在仿真软件中运行,必须将220model.v, altera_mf.v , altera_primitives.v 三个文件加入到仿真软件的项目中一同编译,RAM/ROM才能正常初始化和使用。

采用testbench直接用寄存器仿真ram的程序如下,直接粘贴到testbench中即可使用:

parameter romname="";

reg[7:0] column_rom;

reg[15:0] address_rom;

reg [7:0] len_rom;

reg[7:0] dat_rom;

reg[7:0] sum_rom;

reg[500*8:1] noused_rom;

reg[640:1] errstr_rom;

reg[7:0] rom_contain[0:479232-1];

integer i_rom,fd_rom,code_rom;

integer i;

initial begin

for(i=0;i<500;i=i+1)

rom_contain[i]=0;

end

initial

begin : continue

fd_rom=$fopen(romname,"r");

if(fd_rom==0) $stop;

forever begin

code_rom=$fscanf(fd_rom,"%2x",len_rom);

if(len_rom==0)

begin

disable continue;

end

sum_rom=len_rom;

code_rom=$fscanf(fd_rom,"%4x",address_rom);

sum_rom=sum_rom+address_rom;

sum_rom=sum_rom+(address_rom>>8);

code_rom=$fscanf(fd_rom,"%2x",dat_rom);

sum_rom=sum_rom+dat_rom;

for(i_rom=0;i_rom

code_rom=$fscanf(fd_rom,"%2x",dat_rom);

sum_rom=sum_rom+dat_rom;

rom_contain[address_rom]=dat_rom;

address_rom=address_rom+1;

end

code_rom=$fscanf(fd_rom,"%2xn",dat_rom);

sum_rom=sum_rom+dat_rom;

end

此段程序生成了名为rom_contain的8位寄存器堆来仿真ram/rom,在使用时直接用以下语句

reg [31:0] rom_data;

always @ ( clk or negedge reset )

if(~reset)

rom_data<=32'b0;

else

rom_data <= rom_contain[address]

就可将数据读出

RAM的仿真

RAM的仿真与ROM相似,也可以用altera的工具生成和使用寄存器堆来模拟,并且不需要赋予初值,具体不再详述,可按照上述ROM的生成办法来完成。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689550434a265384.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信