试用手记:为国产FPGA正名(五外扩SFR使用)_第1页
试用手记:为国产FPGA正名(五外扩SFR使用)_第2页
试用手记:为国产FPGA正名(五外扩SFR使用)_第3页
试用手记:为国产FPGA正名(五外扩SFR使用)_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

试用手记:为国产FPGA正名(五,外扩SFR使用)关键词:FPGA,国产,国产FPGA,试用特权同学

题记:本以为这个国产FPGA的就此夭折,没想到权衡之后,在性能打些折扣的情况下还是重新捡起来了。从刚接触这个器件的时候特权同学就很关心它的硬核可扩展性,Avalone接口用上手了,当然很希望这个51硬核也能够提供类似的强大扩展接口。不过话说回来,毕竟是个8位的核,再强大也不到哪去,但在花了点心思琢磨了这个小玩意的扩展方式后,多少觉得还是有点花头的。

SFR,即特殊功能寄存器。SFR是8051单片机内部用于访问控制各种片上集成外设的主要寄存器,如常见的IO口(P0/P1/P2/P3)读写、IO中断配置、定时器配置、串口外设等。因此,对一般用户而言,玩转8051就是玩转SFR的过程。一般的单芯片8051单片机的SFR接口不对外开放,除了部分寄存器内部使用外,余下地址空间保留。而Astro器件的这颗8051硬核将空置的SFR地址空间开放给用户,提供了专门的对外接口时序。

特权同学将关于Astro器件SFR相关的特性整理如下:

可寻址空间0x80~0xff。

部分地址空间已被8051内部使用。

16个地址空间(能被8整除的地址如0x80、0x88、0x90、…0xf8等)可位寻址。

最多支持49个8051核外可用SFRs,除核内已占用的地址,余下地址空间均为用户可用的核外SFRs。

外部SFR接口含有等待状态寄存器(主要由sfack信号控制实现),允许8051内核与较慢的外设连接。

外部SFR读写时序如图1所示。2011-5-2511:44:13上传下载附件(73.48KB)

图1

为了简单的评估8051硬核的SFR扩展功能的性能,特权同学做了一些测试。

测试1:SFR可用性测试

简单的用逻辑模拟一个SFR可访问的外部寄存器,该寄存器只使用低四位,对应控制4个外部LED的亮暗。以此验证核外SFR的可用性。

对于8051硬核而言,如果开启核外SFR功能,提供了如下接口(与前面给出的波形图对应):

//ExternalSpecialFunctionRegistersinterface

output[7:0]sfrdatao;

//8051写数据

output[6:0]sfraddr;

//8051访问地址

input[7:0]sfrdatai;

//8051读数据

outputsfrwe;

//8051写SFR使能信号,高电平有效

outputsfroe;

//8051读SFR使能信号,高电平有效

SFR从机的逻辑接口代码如下:

reg[3:0]ledr;

//LED指示灯对应的SFR

always@(posedgeclk_50mornegedgerst_n)begin

if(!rst_n)ledr<=4'h0;

elseif(sfrwe&&(sfraddr==7'h78))ledr<=sfrdatao[3:0];

//8051往地址为0xf8的SFR写数据,将数据锁存到ledr寄存器中

end

assign{led3,led2,led1,led0}=ledr;

软件编程时,需要在工程中做一个新的sfr定义:

//自定义SFR

sfrLED=0xf8;

//低4bit控制LED亮暗

编写函数实现SFR控制的流水灯:

voidmain(void)

{

while(1)

{

LED=0x1;

delay(500);

LED=0x2;

delay(500);

LED=0x4;

delay(500);

LED=0x8;

delay(500);

}

}

实验结果证明功能可行,达到预期。这个SFR功能的使用还是蛮简单的。

为了验证写功能,基本思路是想针对板载4个按键做一个SFR寄存器,专供8051内核读取当前按键值,然后把该值分别赋给4个LED(在前面测试的基础上执行)。添加的逻辑代码:

reg[3:0]keyr;

always@(posedgeclk_50mornegedgerst_n)begin

if(!rst_n)keyr<=4'hz;

elseif(sfroe&&(sfraddr==7'h79))keyr<={key4,key3,key2,key1};//8051从地址为0xf9的SFR读出数据

elsekeyr<=4'hz;

end

assignsfrdatai=keyr;

读时序这个时钟clkcpu应该是8051工作的指令时钟,即8051外部输入时钟的12分频。这个时序图好像不太准确,实际读或写选通高脉冲不会保持一整个指令周期。特权同学测试下来发现用50MHz时钟做从接口,早一个时钟或是晚一个时钟周期送数据都无法使8051读走数据,只有上面给出的代码下时钟送数据才能正常保证8051锁存数据。也就是说,数据必须在读选通期间都保持稳定,早一个时钟周期撤销或是晚一个时钟周期撤销都不行。因此,为了延长数据有效长度,改进如下:

reg[3:0]keyr;

regkeyrden;

always@(posedgeclk_50mornegedgerst_n)begin

if(!rst_n)keyrden<=1'b0;

elseif(sfroe&&(sfraddr==7'h79))keyrden<=1'b1;

elsekeyrden<=1'b0;

end

always@(posedgeclk_50mornegedgerst_n)begin

if(!rst_n)keyr<=4'hz;

elseif(keyrden||(sfroe&&(sfraddr==7'h79)))keyr<={key4,key3,key2,key1};

//8051从地址为0xf9的SFR读出数据

elsekeyr<=4'hz;

end

assignsfrdatai=keyr;

软件编程也很简单:

//自定义SFR

sfrLED=0xf8;

//低4bit控制LED亮暗

sfrKEY=0xf9;

//低4bit对应当前按键值

voidmain(void)

{

while(1)

{

LED=KEY;

}

}

测试2:SFR性能测试

与《国产FPGA试用手记二(51硬核性能测试)》做了类似的测试,验证LED寄存器拉高拉低的速度,和之前的结果一样。也就是说,核外的SFR在不使用等待功能的情况下与核内SFR的操作速度是一样的。

测试3:SFR等待功能验证

在50MHz的clkcpu下,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论