本项目是基于YADAN项目的扩展,在YADAN项目的基础上添加FFT模块、WS2812驱动模块、ADC模块挂载到APB总线上,并最后使用adruino的进行软件程序开发实现各个模块的调用,完成了最终的效果。
该项目是Verimake之前就开源的一款基于RISC-V架构的五级流水线的CPU内核,再通过AMBA总线与外设相连的一款SOC。大家可以在YADAN Project | 介绍这篇文章看到详细的介绍,这边就不多进行概述。
APB总线是AMBA中用于低速且低功率消耗的外围,且可针对外围作功率消耗及复杂接口的最佳化。在 APB 总线中,唯一的 M 为 APB bridge,其它一些低速和低功率的外围皆为 S。相较于AHB的架构要简单上不少。 APB的信号如下表所示 我们在这里用到的都是比较低速的外设添加,所以在该项目中都是在APB上面进行挂载使用,了解了APB的信号后,我们也要了解下它的数据传输时序。从下面的图可以看到APB的数据传输都是在时钟的上升沿进行触发,当PENABLE与PSELxx信号均为高时,开始进行数据传输。
该部分采用Anlogic的内置ADC进行使用,如何使用Anlogic的ADC可以参考在 YADAN Board 上入门 Verilog - (3) 用旋钮调节灯的亮度,来学习调用 IP Core 访问内建 ADC这篇文章。我们在YADAN上使用ADC模块需要将其挂载到APB上,来供内核调用ADC上采集到的数据,所以需要在ADC模块加上APB Slave接口。
这里用到的FFT是采用Cooley -Tukey算法中的基-4算法实现的一个16点FFT模块,并且为了更快的进行频谱的输出,在最后输出的是进行了乘方的结果。 采用的数据格式为 其中旋转因子的格式为 使用移位的方式替代乘法,节省DSP资源
always @( data_16_b or data_in_8) begin case(data_in_8) 8'b00000000: mul = 23'b0; 8'b00110001: mul = ( data_16_b << 0 ) + ( data_16_b << 4 ) + ( data_16_b << 5 ); 8'b11001111: mul = ( data_16_b << 0 ) + ( data_16_b << 4 ) + ( data_16_b << 5 ); 8'b01011010: mul = ( data_16_b << 1 ) + ( data_16_b << 3 ) + ( data_16_b << 4 ) + ( data_16_b << 6 ); 8'b10100110: mul = ( data_16_b << 1 ) + ( data_16_b << 3 ) + ( data_16_b << 4 ) + ( data_16_b << 6 ); 8'b01110110: mul = ( data_16_b << 1 ) + ( data_16_b << 2 ) + ( data_16_b << 4 ) + ( data_16_b << 5 ) + ( data_16_b << 6 ); 8'b10001010: mul = ( data_16_b << 1 ) + ( data_16_b << 2 ) + ( data_16_b << 4 ) + ( data_16_b << 5 ) + ( data_16_b << 6 ); 8'b01111111: mul = ( data_16_b << 7 ); 8'b10000001: mul = ( data_16_b << 7 ); default: mul = 23'b0; endcase end
整体的流程如下图所示,由串转并模块、控制模块、寄存器模块、蝶形运算单元、并转串模块组成,旋转因子由于数量较少,所以直接设为参数进行使用。 在输出的结果与matlab的计算结果相比较可以看到得到的结果有着不错的准确度。
这里的WS2812的RGB灯的驱动也是由FPGA端实现的,但是显示的颜色、位置都是由软件部分控制的。 WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。它可以多个进行串联,并使用串行信号进行对灯光的控制。该信号的数据传输方式如下图所示 其中数据的类型传输方式、所需保持电平如下图所示 WS2812是RGB灯,所以每次都需要传输RGB的数据来组合不同的颜色进行显示,不过要按照GRB顺序发送数据并且先发送高位。
在各个模块设置多个寄存器来进行控制或者数据传输,所以软件端就是对寄存器的读写来进行对模块的控制,下图是本项目定义的一些寄存器。 下图为整个软件设计中的流程图,可以看到YADAN SOC可以灵活的对模块进行控制以及数据传递。
成品展示可以到FPGA SoC设计案例:RISC-V软核+FFT外设+串行灯控制器外设=能用Arduino代码开发的音乐频谱灯哔哩哔哩bilibili进行观看。
大佬,求求源工程
大佬不好意思,请问这个项目有源工程吗?
网站备案号:ICP备16046599号-1