基于FPGA的SOC外部组件控制器IP的设计

1 引言
本文侧重于介绍ip 模块中组件控制器的设计和实现。一个基于fpga 的lcd 控制器设计作为例子被介绍。这个组件控制器设计属于固核ip 设计,也就是软硬结合的方法。设计内容主要包括电路结构、vhdl 框架和仿真结果。该设计实现了面向可重配置soc 的单指令驱动lcd 操作。
2 soc 组件与组件控制器
soc 组件是soc 为实现某种操作功能所需要的器件或设备。这些组件可以是内部的也可以是外部的,如lcd、键盘、设备驱动器等是外部组件,电子转换器、变换器、放大器等则属于内部组件。无论是内部,还是外组件,其控制单元都要被设计在soc 内部。作为一个系统的核心,soc要完成运行、操作或控制功能,必须有相应的组件配合。而多数组件,尤其是外部组件在soc 内都要有一个对应的控制器。所以,为了实现应用对象操作,soc 要设计相当数量的组件控制器。组件控制器的设计,对soc 而言就是一些ip 模块的设计。
soc 与外部组件的基本关系见图1。相对于外部组件而言,soc 由微处理器核mp(microprocessor)和相关的控制器ip 构成。为了得到最优的控制效率,soc 的mp 常常被设计成可重配置(reconfigurable)的mp[5]。这意味着用户可对mp 的一些配置进行修改和添加以适应应用系统的需要,如用户可以对mp 的指令系统进行重新配置,设计加入用户需要的专用指令。为了区别于一般的mp,图1 中的给出了soc-mp 来代表用于soc 的mp 核
图1 soc 与外部组件的基本关系
soc的组件控制器与专用指令配合可以实现一些复杂操作的单指令运行,从而大大提高了soc应用系统的操作速度和运行效率[6]。这也正是嵌入式系统的专用设计特性和高效控制优势的体现。
尽管soc 的ip 核分为硬核、软核、固核,对于非专业集成电路设计的用户来说,多数采用基于fpga 的设计方法。实际上也就是软硬结合的ip 固核设计。本文介绍的是一种用vhdl 硬件描述语言在fpga 上设计soc 外部组件控制器ip 的方法。
3 lcd 控制器的设计
液晶显示器 lcd(liquid crystal display)是soc 的一种外部组件,会经常被用到。为了实现soc 对lcd 的高效管理,要设计一个lcd 控制器ip 模块。这个模块被命名为lcd_fct。外部组件lcd 与soc 的关系与控制结构可参考图2。
对照图1 可以看出,图2 中的lcd_fct 是外部组件控制器ip,它位于lcd 和mp 之间,通过数据(data)、地址线(address)、控制(control, write_e)和信号线(lcd_busy)等与mp 和lcd 建立联系。
图2 外部组件lcd 的soc 控制结构
在这个设计中对lcd 控制器lcd_fct 的要求是:lcd_fct 接受来自mp 的指令,如初始化、清屏和显示等。lcd_fct 按照指令的要求产生一系列控制信号和相应的时序来控制lcd 模块完成相应的操作。实际上,lcd_fct 对lcd 模块的操控主要包括lcd 初始化、清屏、传送显示数据和地址。
当lcd_fct 的输入信号reset 是低电平时,复位电路(reset circuit)开始工作,进行初始化操作、对标志和状态清零、设定相关常数等。
时钟调节电路(clock regulator)主要为定时器提供具有高质量波形的时钟。为满足运行中不同时序的需要, lcd_fct 中设计了微秒定时器(μs timer)和毫秒定时器(ms timer)。定时的时间常数被放在时间常数寄存器(time constant register)中。
从mp 来的地址(addrin)和控制(write_e)信息被送到译码器(decoder)。译码器根据不同的地址和控制信息产生相应的指令标志,如复位、清零等。并把指令标志送给控制电路(control circuit)。
控制电路(control circuit)是lcd_fct 的核心。它控制数据输入寄存器(data_in register)、数据输出寄存器(data_out register)、状态寄存器(state register)、控制寄存器(control register)和时间常数寄存器(time constant register)。控制电路根据指令标志和时序来操作不同的寄存器,实现lcd_fct 的管理和运行。
数据输入寄存器接受来自mp 的数据并根据需要送数据到数据输出寄存器。数据输出寄存器把数据通过数据线lcd_db 送到lcd 模块的数据总线上。这个数据既可能是要显示的数据,也可能是指令。
控制寄存器产生操作lcd 的控制信号,如lcd 中选信号(lcd_e)、lcd 内部寄存器选择信号(lcd_rs)和lcd 读写信号(lcd_r_w)。
状态寄存器在lcd 处于工作下,会产生lcd 繁忙信号(lcd_busy)。这意味着,lcd 此时不会接受其它指令。与其它信号不同,lcd_busy 是发送给mp 的。
实际上lcd_fct 的运行操作主要是对各种控制、状态和数据信号进行管理。
4 fpga 设计和仿真
在 lcd_fct 的fpga 设计中,主要采用的vhdl 语言的程序设计[7]、max plus-ii 仿真以及soc 和lcd 的实际连接调试。lcd_fct 的hvdl 设计框架如下:
library
entity lcd_fct is
port( );
end lcd_fct;
architecture struct of lcd_fct is
signal
constant
begin
res: process;
clk :clk_div;
lcd: process;
begin
if init then
initialization;
elsif clr then
clear lcd;
elsif addr then
write address to lcd ram;
elsif data then
write data to lcd ram;
end if;
end process;
us: ustimer;
ms: mstimer;
end struct;
lcd 控制器ip 模块lcd_fct 的仿真结果如图3 所示。在图中左侧的信号就是lcd_fct 的输入/
输出信号。
图 3 lcd_fct 的功能仿真
当把write_e 设置成高电平时,指令写入lcd_fct。对于读写控制信号lcd_r_w 来说,低电平为写操作,高电平为读操作。由于该仿真都是lcd_fct 对lcd 进行写操作,lcd_r_w 始终为低电平。图中通过addrin 的变化来代表不同的指令。
在addrin 等于7fff 时,lcd_db 被赋值01。这意味着lcd 被清屏。当addrin 等于7ffe,且data_in 送入31 时,lcd_db 被赋值31,lcd 就会显示“1”。 addrin 被设置成7ffd,且data_in 等于8 时,被显示的字符将出现在显示屏的第8 个字符的位置,实现了定位显示功能。
当addrin 被赋值7ffc 时,lcd 被初始化。初始化包括功能设置、关闭显示、打开显示、清屏、显示移位和工作方式设置等操作。
由此可见,只要在soc 的mp 中加入适当的指令,可以对addrin 进行控制,soc 就可以完成对lcd 的管理。由于本设计中soc 的mp 是可重配置mp,添加或修改指令是不存在问题的。仿真表明,lcd_fct 的设计达到了设计目标,操作结果是令人满意的。一般的lcd 程序控制完成一项操作(如初始化)需要执行多条软件指令。用fpga 设计的lcd_fct 只要一条指令就能完成相应的操作,而且是硬件运行,效率提高了许多倍。
5 结论
组件控制器的设计是soc 设计的重要组成部分。采用fpga 是完成组件控制器设计的有效手段。通过lcd 控制器的设计和仿真,说明基于fpga 的组件控制器可以用一条指令完成原来许多条指令才能完成的操作,可以大大提高系统的运行效率。因此,这是一项有意义的工作。
本文作者创新点在于把fpga 设计和soc 的组件控制器联系起来,并通过一个具体例子介绍了如何设计单指令驱动的组件控制器。

山灵UA2平衡便携解码耳放线全渠道正式开售
焊接机器人焊缝跟踪寻位是什么?
质量好的连接器一定要有两个方面
LED封装形式有哪些
天猫精灵大升级 搭配“火眼”变得能听会看
基于FPGA的SOC外部组件控制器IP的设计
台湾首个照明共通标准问世 目标直指国际标准
Semtech携手巴西国家电信监管局Anatel保证整个巴西的LoRa技术运行
光泵浦技术让强大的量子点激光器又向前迈进了一步
Shopee视频技术落地产品
发现用户单相电表计量接线异常的反窃电方法
一种具有多重氢键的皮肤友好型导电水凝胶
辞旧迎新,北京雅士林新春致辞
对讲机蓝牙和电话连接问题
维信诺荣获中国手机最高荣誉 富士胶片集团发布21财年报
工程师电子制作故事:数字电源DIY设计
紫光国芯拟以发行股份方式收购长江存储
一起来认识下有关半钢电缆的几个重要的知识
芯片封装测试14个概念龙头股
中国的独角兽公司有哪些