当前位置:首页 > 电源 > 数字电源
[导读]摘要:文章介绍了基于Nios II的SOPC的通用字符显示电路的设计,通过实时读取点阵字库信息并输出到VGA端口的方法实现。与传统方法相比,具有简单易行、便于二次开发的特点。以本方法进行了电子万年历的设计,并在基于

摘要:文章介绍了基于Nios II的SOPC的通用字符显示电路的设计,通过实时读取点阵字库信息并输出到VGA端口的方法实现。与传统方法相比,具有简单易行、便于二次开发的特点。以本方法进行了电子万年历的设计,并在基于EP2C35F672C6的DE2开发板上下载验证,结果表明本方法切实可行,适合于实时信息显示。
关键词:SOPC;视频图形阵列字符显示;Nios II

0 引言
    VGA(视频图形阵列)是IBM于1987年提出的图形显示标准,虽然早己不是先进的显示标准,但由于其技术和工艺成熟、成本低廉等优势,目前仍有着广泛的应用。
    现有基于FPGA的VGA显示系统需要显示字符,尤其是汉字时,通常方法是首先获取所用字符的字模,加入到HDL或C代码中调用。这种方法过程繁琐,且系统通用性不强。本设计以任意字符显示为特点,通过实时读取点阵字库实现字符显示,对存储空间利用率高,且灵活性好,便于进行二次开发。

1 系统硬件设计
    本设计使用的是基于EP2C35F672C6的DE2开发板。在SOPC Builder中,将系统命名为system_0,目标板设定为预定义过的“DE2 Board”,加入NIOSII/s软核处理器,在时钟列表中添加50MHz的外部时钟,在组件列表中添加所需组件,如图1所示。


    由于本设计的Nios II程序及所使用的字库需要存储在Flash中,因此添加了CFI Flash控制器以及三态Avalon总线,EPCS控制器用于存放FPGA配置信息。LED及JTAG UART组件用于调试中状态反馈,按钮和开关组件用于人机交互,SDRAM组件是本系统的运行内存,最后是VGA显示IP核。
    本设计中所用VGA显示IP核符合Avalon总线规范,实现的功能为单色显示,即前景色和背景色各为预先指定的一种颜色,系统启动时核内显存读入一幅单色图像作为初始显示画面。编程时分别以VGA_Set_Pixel或VGA_Clr_Pixel指令将某一像素置为前景色或背景色。此IP核的结构原理如图2所示。

[!--empirenews.page--]
    在整个工程的顶层文件中例化生成的system_0模块,用锁相环模块产生VGA所需的25MHz时钟信号并作为VGA模块iCLK 25信号输入。由于SOPC的CPU RESET信号只能锁定在实际器件中的按钮上作为输入,而DE2开发上的4个按钮在后面的实例都需要用到,因此在顶层文件中将CPU RESET信号直接置1。system_0的其他的输入输出信号根据开发板的相应资源进行定义和管脚锁定。
    本设计的FPGA配置信息(sof文件)写入EPCS器件中,Nios II程序(elf文件)写入CFI Flash模块中,所用到的两个字库也写入CFI Flash中,字库起始偏移地址分别为0x80000和0x1000000。

2 字符显示原理
    调用点阵字库实现任意数字和汉字的实时显示是本设计的基本方法。本设计中分别采用ASC16和HZK16字库作为ASCII码和汉字的点阵字库,这两个字库最早在UCDOS系统中被使用。
    ASC16字库含有256个ASCII码字符,每个ASCII码字符均以16×8的点阵表示,点阵信息以行优先的方式存储,每个字符占用128个存储位(16字节),按照ASCII码的编码顺序存储,故一个字符的ASCII码值乘16就是它在ASC16字库中的偏移地址。
HZK16是依据GB2312编码存储的点阵字库,每个汉字用16×16的点阵表示,每个字符占用256个存储位(32字节),点阵信息同样以行优先方式存储。
    HZK16字库内汉字按照内码顺序存储,每个汉字的内码由两个字节组成,高位字节为区号,低字节为位号,两字节的范围均为0xA1~0xFE共94个取值。将汉字的两个字节分别减去0xA1,即可得到该汉字的区号和位号。设某个汉字编码的两个字节分别为0xMM和0xNN,则该汉字在HZK16字库中对应的偏移地址为:
    OFFEST=[94×(0xMM-0xA1)+(0xNN-0xA1)]×32
    定位了ASCII码字符或汉字在点阵字库中的位置后,读出其所对应的16字节或32字节数据,用按位与运算和左移运算对每个字节的8个位逐一测试,将测试结果为1的位的对应像素填充为前景色,否则将像素填充为背景色,实现设定字符的显示。

3 SOPC中相关函数的定义
    根据上述原理,以C语言编写适用于上述SOPC的字符显示函数,并以Nios II HAL系统库为基础。
3.1 ASCII码字符显示函数show_asc
    此函数用于在VGA输出画面的(x,y)坐标处显示单个ASCII码字符asc,主要代码如下:
   
          [!--empirenews.page--]

3.2 汉字字符显示函数show_hz
    此函数用于在VGA输出画面的(x,y)坐标处显示单个汉字字符hz,主要代码如下:
   
3.3 字符串显示函数show_str
    此函数用于在VGA输出画面的(x,y)坐标处显示长度为len的字符串str,内容可以由ASCII码及汉字混合组成,其主要代码如下:
   

4 实例应用
    基于以上的软硬件设计,这里以万年历作为其应用的一个实例。以往基于FPGA的万年历设计多使用LCD或七段数码管作为输出,显示基本的数字和符号尚可,但若要加入问候语、纪念日等中文信息则难于实现,基于本电路设计的万年历则可以解决这一问题。
    从功能上划分,此万年历设计可分为3个模块:
    (1)时间日期生成模块。此模块包含年、月、日、星期、时、分、秒共7个变量的输出,每个变量都有各自的子模块,每个子模块都包含预置、计数、进位和显示的功能。其中星期的确定方法是计算当前日期与1990年1月1日(星期一)之间间隔的天数,将此天数对7取模并加1,即得到当前星期的数字。
    系统启动时,首先将预置的初始时间日期传递给显示函数,由显示函数在预定位置分别显示7个数据,将数字加上0x30便得到其对应的ASCII码值,其中星期是将1~7的数字按星期一~星期日的汉字显示。
    随后进入系统的主循环,以1秒钟为循环间隔,当前级数字到达最大值时向下一级数字进位。其中日进位时需判断月份类型(大月、小月或2月),当前月为2月时还需判断年份类型(是否闰年),以确定日的进位数值。其他数字的进位值是固定的,其中年的范围设定为1990~2099。[!--empirenews.page--]
    (2)时间日期调整模块。除星期外,其他6个数字均可被调整。时间和日期的调整需要用到开发板上的4个按钮,对应功能分别为切换日期/时间(KEY0)、在年月日和时分秒间切换(KEY3)、数字减(KEY1)和数字加(KEY2)。用两个变量pos与dot表示当前的活动数字,其对应关系如表1所示。


    在程序上,此模块由按下按钮所触发的中断服务函数实现。按钮按下时产生下降沿,读取边沿捕获寄存器的值即可判断哪一按钮被按下。按下KEY0或KEY3时,当前活动数字发生改变;按下KEY1或KEY2时,根据当前活动数字的不同进入6个分支,以各自数字的进位规则得到调整后的数字。
    为了显示直观,在当前被调整的数字下方有实心原点作为指示标志,此圆点以ASCII码字符0x07表示。
    (3)其他信息显示模块。此模块的作用是在未被时间日期信息占用的区域显示自定义的信息,如不同时刻的问候语、纪念日信息等。除了使用字符显示的方法外,还可对VGA输出的初始画面进行定制,如加入自定义的图案标志等。此外,由于所用到两个字库均为单一字体,其他特殊字体的文字也可以加入到此初始图像中进行显示。

5 测试与评价
    将以上万年历实例设计下载到DE2开发板上运行,经测试,实现了所有预定功能,ASCII码字符及汉字字符显示正确,计时稳定、准确。运行时的一个画面如图3所示。


    本电路采用基于Altera Nios II的SOPC平台,实现了通用字符VGA显示的功能,设计上灵活高效,系统资源利用度高。以本设计的通用平台为基础加以开发,可应用于诸多需要实时信息显示的场合。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在电子电路中,电解电容的纹波电流承受能力直接影响其使用寿命和电路稳定性。准确测试纹波电流不仅能验证电容性能是否达标,也是电路设计可靠性验证的关键环节。以下从测试原理、设备准备、操作步骤到数据解读,全面介绍电解电容纹波电流...

关键字: 电解电容 纹波电流 电路设计

在电子电路设计与实践中,稳压芯片是维持稳定输出电压的关键组件。然而,当我们将两个输出电压不同的稳压芯片的输出脚连接在一起时,会引发一系列复杂的物理现象和潜在风险。这一操作不仅违反了常规的电路设计原则,还可能对电路系统造成...

关键字: 稳压 芯片 电路设计

在当今电子技术飞速发展的时代,随着电子产品不断向小型化、高性能化迈进,印刷电路板(PCB)的设计变得愈发复杂和精密。过孔,作为 PCB 中连接不同层线路的关键元件,其对信号完整性的影响已成为电路设计中不可忽视的重要因素。...

关键字: 印刷电路板 电路设计 信号

IIC(Inter IC Bus)协议是一种广泛应用于嵌入式系统中的同步半双工通信协议。随着电子设备的复杂性不断增加,高多层电路板设计变得越来越普遍。在高多层电路板中实现可靠的IIC通信,需要综合考虑布线策略、电源设计、...

关键字: 电路板 电路设计

在现代高速、高密度的电路设计领域,电路完整性是确保电子系统可靠运行的关键要素。回路电感作为电路中的一个重要参数,对电路完整性有着多方面的深远影响。从信号传输的准确性到电源系统的稳定性,回路电感在其中扮演着不容忽视的角色。...

关键字: 电子系统 回路电感 电路设计

在现代汽车电子控制系统中,CAN(Controller Area Network,控制器局域网)总线作为一种高效、可靠的通信协议,发挥着举足轻重的作用。它不仅连接着发动机控制单元(ECU)、变速器控制单元、制动系统控制单...

关键字: 车规级CAN总线 电路设计

串联一个二极管,是利用二极管的单向导电的特性,实现了最简单可靠的低成本防反接功能电路。这种低成本方案一般在小电流的场合,类似小玩具等。

关键字: 电路设计 串联

在现代电子系统设计中,SOPC(System on a Programmable Chip,可编程片上系统)、SoC(System on Chip,片上系统)和FPGA(Field Programmable Gate A...

关键字: SOPC SoC FPGA

USB 2.0接口以其高速率等优点渐有取代传统ISA及PCI数据总线的趋势,热插拔特性也使其成为各种PC外设的首选接口。

关键字: 数据采集 电路设计

Finishing 终饰、终修指各种制成品在外观上的最后修饰或修整工作,使产品更具美观、保护,及质感的目的。Metal Finishing特指金属零件或制品,其外表上为加强防蚀功能及观而特别加做的处理层而言,如各种电镀层...

关键字: PCB 电路设计
关闭