差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
ext_osc [2017/03/27 17:25] group001 [FPGA逻辑实现] |
ext_osc [2017/03/28 23:00] (当前版本) group001 [测试报告及说明] |
||
---|---|---|---|
行 16: | 行 16: | ||
4.OLED:选择分辨率为128*64d的0.96寸OLED,采用4线SPI与FPGA通信。 | 4.OLED:选择分辨率为128*64d的0.96寸OLED,采用4线SPI与FPGA通信。 | ||
===== 原理图说明 ===== | ===== 原理图说明 ===== | ||
- | 原始大小: {{wiki:dokuwiki-128.png}} | + | 1.输入信号采用SMA射频头传输,采用无源电阻分压对大信号进行10倍衰减,小信号不衰减,并联电容进行高频补偿,2路开关选择是否衰减。 |
- | 指定宽度: {{wiki:dokuwiki-128.png?50}} | + | 2.考虑到电路输入阻抗较大,故采用射极跟随器与后极放大电路缓冲。 |
- | 指定宽度和高度: {{wiki:dokuwiki-128.png?200*50}} | + | 3.通过四路模拟开关对衰减的信号进行x10.x5.x2 x1进行相应的比例放大,以满足ADC采样电路的输入为1vpp。 |
- | 重新指定宽度和高度的外部图像: {{http://de3.php.net/images/php.gif?200x50}} | + | 4.8位高速ADC对模拟信号进行数字量化,通过FPGA对数据进行相应的处理以驱动OLED显示波形。 |
+ | 5.OLED采用4线SPI与FPGA通信。 | ||
+ | |||
+ | {{:aaaa.png?nolink|}} {{:b.png?nolink|}} {{:cccc.png?nolink|}} | ||
+ | {{:dddd.png?nolink|}} {{:eeee.png?nolink|}} | ||
===== PCB布局布线 ===== | ===== PCB布局布线 ===== | ||
.PCB部分设计:根据板框和装配要求,器件按信号流行模块化布局,规则设置要满足厂家生产工艺要求及电气规则,高速器件走线进行阻抗匹配,模数地分割,丝印不盖住过孔和元器件外形轮廓等等 | .PCB部分设计:根据板框和装配要求,器件按信号流行模块化布局,规则设置要满足厂家生产工艺要求及电气规则,高速器件走线进行阻抗匹配,模数地分割,丝印不盖住过孔和元器件外形轮廓等等 | ||
行 32: | 行 36: | ||
问题和解决方法:SMA射频头信号有所失真,通过调节补偿电容改善。 | 问题和解决方法:SMA射频头信号有所失真,通过调节补偿电容改善。 | ||
===== FPGA逻辑实现 ===== | ===== FPGA逻辑实现 ===== | ||
- | ADC采样速率高,总线传输速率低,为保证系统的正常工作,AD转换器与FPGA之间必须采用FIFO作为缓冲器。我们利用Diamond工具生成一个4k*位数据宽度的缓冲块。 | + | 1.在顶层我们设计的模块有adc9283、FIFO_DC、Baud、send_ctrl、Uart_Tx、Generater_100mbps(ram_for_oled、oled_by_ram),顶层模块名uart_my3 |
- | FIFO的输入信号有数据输入信号,直接和A/D转换器的输入相连下;写信号和写使能信号,写信号和上述频率选择信号相连,可以以合适的速率将数据写入FIFO,写使能设置为永远有效;读信号和读使能信号,这都有FPGA发出的控制信号给出;异步清零信号则在每次写FIFO前将其清空。输出信号有数据信号驱动OLED;满标志信号,当有效时停止对FIFO的写操作作;空标志信号,当有效时停止对FIFO的读操作。 | + | uart_my3模块和Generater_100mbps是同时设计的,验证过后将两个模块连接在一起实验功能。之所以使用串口模块是因为方便调试,将FIFO输出的数据通过串口发送到PC端,用串口调试助手观察波形。 |
+ | adc9283:给AD9283提供时钟输入 | ||
+ | FIFO_DC:使用4K的FIFO缓存AD转换后的数字量数据 | ||
+ | Baud:波特率发生模块 | ||
+ | send_ctrl:波特率选择模块 | ||
+ | Uart_Tx:串口数据发送 | ||
+ | ram_for_oled:128x64的RAM IP核模块,用于存放FIFO发送的数据 | ||
+ | oled_by_ram:通过SPI将数据发送到OLED上进行显示、控制OLED刷新和屏幕的驱动 | ||
+ | 2.关键模块实现 | ||
+ | 比较关键的代码主要有AD9283串行输入数据转换成8位并行数据输出、FIFO数据的缓存、双口RAM模块、屏幕驱动模块。 | ||
+ | 8位并行数据输入:根据AD9283的时钟以此读取输入的模拟信号,输入AD9283的时钟是12Mhz系统时钟进行8分频后进行模拟数据的采集,将采集后的数据输出给FIFO。 | ||
+ | FIFO数据的缓存:使用Dimond中的IP核,容量为4KB,输入数据为AD9283的输出数据,输出数据送入RAM中,写入FIFO数据的时钟和AD9283的时钟是同步的。 | ||
+ | 双口RAM模块:使用Dimond中的IP核,容量为128x64,输入数据为FIFO的输出数据,输出数据送入屏幕驱动模块,系统时钟的300分频作为串口的波特率、RAM的数据写时钟和FIFO的读时钟。 | ||
+ | 屏幕驱动模块:将RAM中读出的数据通过OLED驱动模块显示到屏幕上。 | ||
+ | 3.关键知识点、难点 | ||
+ | 整个代码中比较复杂的就是OLED屏幕驱动控制部分的数字逻辑的代码比较难实现 | ||
===== 测试报告及说明 ===== | ===== 测试报告及说明 ===== | ||
+ | {{:图片1.png?nolink|}} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | {{:图片2.png?nolink|}} | ||
===== 相关文档 ===== | ===== 相关文档 ===== |