基于FPGA的信号发生器的设计
首先先要介绍的是本设计的主芯片是ALTERA的一款芯片,芯片名称是EP2C5T144C8N。该芯片的LE单元有4608个,PLL锁相环具有2个,IO口管脚具有142个,差分通道55个,嵌入式乘法器26个,RAM的存储容量大小是119808bits.该FPGA芯片的功耗也比较低。对于信号发生器的设计,不论芯片的类型,只要所设计的逻辑单元够用即可,还有就是内存要够。好了,话不多说。直接来开始FPGA的信号发生器设计吧。
我当时用的是Quartus-II是13.0的版本作为开发环境,设计的通信方式是最常见的SPI通信方式,该方式通信比较简单。当时我为了调这个通信的时序也花了一天时间才搞定,哎!自认为还是比较笨了。
直接上图:
该图是quartus的开发环境,大家看下,感觉和你们的也不会有太大的区别。尽管软件的版本一直在升级,可是感觉变化也不会太大。
继续上图:
这个是我所建立的文件,大概看了一下,其中.v文件是我建立的一些verilog文件,有几个特殊的文件,比如.bdf文件是顶层文件。因为采用的思想是自顶向下的设计思想。先模块化,然后顶层直接调用即可。.qip文件是调用的是quatus自带的IP核,主要是用来存放波形数据的。.stp文件是signaltep文件,主要是用来硬件仿真观察数据用的,这个很有用哦,和modelsim差不多的功能,主要区别是,一个是硬件仿真,一个是软件仿真。都可以用来分析时序。
直接上代码:
module SPI_SLAVE
#(
parameterrom_len_width=9,//ROM标的深度,同时也代表了相位控制字的位数
parameterftw_width=21,//频率控制字的位数
parameter N=8
)
(
input rst, //复位端口
input [N-1:0] txdata, //N位发送数据,CS下降沿把数据存入模块
input sclk, //spi时钟
input cs, //spi片选
input mosi, //从接收端
input ftw_en, //频率输入控制端使能
input ptw_en, //相位控制端口使能
input clk, //频率>>sclk
output reg miso, //从输出端
output [ftw_width-1:0] ftw_out, //频率控制字的位数
output [rom_len_width-1:0] ptw_out//相位控制字输出
//output [5:0] count,//测试用
//output [23:0] data_temp_done //测试用
);
reg [9-1:0] temp_rx,temp_tx;
reg negedge_cs,temp_cs;
reg data_done;
reg [5:0] count_spi;
reg [24-1:0] data_temp;//24位数据暂存寄存器
reg [ftw_width-1:0] ftw_last;
reg [rom_len_width-1:0] ptw_last;
reg [4:0] i;
always @(negedge rst or posedge sclk)//mosi receive logic
begin
if(!rst)
begin
count_spi<=0;
temp_rx<=8'd0;
data_temp<=0;
ftw_last<=0;
ptw_last<=0;
i<=0;
end
else if(cs==0)
begin
case(i)
5'd0:
begin
data_temp[24-1:0]<={data_temp[24-2:0],mosi};//串行数据左移输入