基于FPGA的数据采集—信号产生篇
文章目录
- 1.Uart接受模块
- 1.1 功能代码
- 1.2仿真代码
- 1.3仿真结果
- 2 ROM中存储正弦波信号
- 2.1 使用MATLAB生成mif文件
- 2.2 ROM_IP核调用
- 2.3仿真代码
- 2.4仿真结果
- 3.DAC驱动
- 3.1功能代码
- 3.2 仿真代码
- 3.3仿真结果
- 4控制模块
- 4.1功能代码
- 5.顶层模块
- 5.1功能代码
- 5.2仿真代码
- 5.3仿真结果
- 5.4板机验证
实验目标
使用串口发送8’haa,驱动TLV5618发出0-2v的正弦波信号
PC端通过串口助手向FPGA发送aa指令,FPGA接受到aa指令之后通过Rom_Ctl模块控制Rom输出生成正弦波的数据,最后通过TLV5618输出正弦波。
1.Uart接受模块
1.1 功能代码
波特率 | 波特率周期 | 采样时钟分频计数值 |
---|---|---|
9600 | 1/9600=104617ns | 104617/20=5208 |
19200 | 1/19200=52083ns | 52083/20=2604 |
38400 | 1/38400=26041ns | 26041/20=1302 |
在实际工业应用中,现场往往有非常强的电磁干扰,只采样一次就作为该数据的电平状态是不可靠的。很有可能恰好采集到被干扰的信号而导致结果出错,因此这里提出以下改进型的单 bit 数据接收方式示意图,使用多次采样求概率的方式进行状态判定:
将每一位数据再平均分成了 16 小段。对于 Bit_x 这一位数据,考虑到数据在刚刚发生变化和即将发生变化的这一时期,数据极有可能不稳定的(用深灰色标出的两段),在这两个时间段采集数据,很有可能得到错误的结果,因此判定这两段时间的电平无效,采集时直接忽略。而中间这一时间段(用浅灰色标出),数据本身是比较稳定的,一般都代表了正确的结果。也就是前面提到的中间测量方式,但是也不排除该段数据受强电磁干扰而出现错误的电平脉冲。因此对这一段电平,进行多次采样,并求高低电平发生的概率,6 次采集结果中,取出现次数多的电平作为采样结果。例如,采样 6 次的结果分别为 1/1/1/1/0/1/,则取电平结果为 1,若为 0/0/1/0/0/0,,则取电平结果为 0,当 6 次采样结果中 1 和 0 各占一半(各 3 次),则可判断当前通信线路环境非常恶劣,数据不具有可靠性,不进行处理。
信号名称 | I/O | 功能描述 |
---|---|---|
Clk | I | 系统时钟 |
Rst_n | I | 系统复位信号 |
Rs232_Tx | I | 串行数据输入 |
Baud_set | I | 波特率选择信号 |
Rx_Done | O | 并行数据输出 |
Date_byte | O | 接收结束信号 |
/***************************************************
* Module Name : uart_byte_rx
* Engineer : SPC
* Target Device : EP4CE10F17C8
* Tool versions : Quartus II 13.0
* Create Date : 2021-3-16
* Revision : v1.0
* Description : 串口接收模块设计
* thought : 1.串行时钟进行同步2.开始使能信号3.分频计数器,进行16次分频采样4.分频时钟5.比特计数
**************************************************/module uart_byte_rx(input Clk, //模块时钟50Minput Rst_n, //模块复位input wire [2:0] baud_set, //波特率设置input Rs232_Rx, //RS232数据输入output reg [7:0] data_byte, //并行数据输出output reg Rx_Done //一次数据接收完成标志);reg s0_Rs232_Rx,s1_Rs232_Rx;//同步寄存器reg tmp0_Rs232_Rx,tmp1_Rs232_Rx;//数据寄存器reg [15:0]bps_DR;//分频计数器计数最大值reg [15:0]div_cnt;//分频计数器reg bps_clk;//分频时钟reg [7:0]bps_cnt;//比特计数器reg uart_state;//开始使能信号reg [2:0] r_data_byte [7:0];//memory变量,深度8位,宽度为3
// reg [7:0] tmp_data_byte;reg [2:0] START_BIT,STOP_BIT;//起始位与结束位wire nedege;
//*****************************1.RS232串行输入信号同步设计*****************//
//1.1同步寄存器,消除亚稳态 always@(posedge Clk or negedge Rst_n) if(!Rst_n)begins0_Rs232_Rx <= 1'b0;s1_Rs232_Rx <= 1'b0; endelse begins0_Rs232_Rx <= Rs232_Rx;s1_Rs232_Rx <= s0_Rs232_Rx; end//1.2数据寄存器always@(posedge Clk or negedge Rst_n)if(!Rst_n)begintmp0_Rs232_Rx <= 1'b0;tmp1_Rs232_Rx <= 1'b0; endelse begintmp0_Rs232_Rx <= s1_Rs232_Rx;tmp1_Rs232_Rx <= tmp0_Rs232_Rx; end
//1.3开始使能信号 assign nedege = !tmp0_Rs232_Rx & tmp1_Rs232_Rx;
//********************************************************************//
//***************************2.采样时钟生成模块*************************//
//2.1波特率设置,实际的采样频率是波特率的 16 倍always@(posedge Clk or negedge Rst_n)if(!Rst_n)bps_DR <= 16'd324;else begincase(baud_set)0:bps_DR <= 16'd324; //96001:bps_DR <= 16'd162; //192002:bps_DR <= 16'd80; //384003:bps_DR <= 16'd53; //576004:bps_DR <= 16'd26; //115200default:bps_DR <= 16'd324; endcaseend
//2.2采样分频时钟计数器div_cntalways@(posedge Clk or negedge Rst_n)if(!Rst_n)div_cnt <= 16'd0;else if(uart_state)beginif(div_cnt == bps_DR)div_cnt <= 16'd0;elsediv_cnt <= div_cnt + 1'b1;endelsediv_cnt <= 16'd0;
//2.3 产生采样时钟bps_clkalways@(posedge Clk or negedge Rst_n)if(!Rst_n)bps_clk <= 1'b0;else if(div_cnt == 16'd1)bps_clk <= 1'b1;elsebps_clk <= 1'b0;
//2.4 比特计数器
//对采样时钟计数bps_cnt bps_cnt == 8'd159表明数据发送成功
//bps_cnt == 8'd12 && (START_BIT > 2 对起始位进行判断always@(posedge Clk or negedge Rst_n)if(!Rst_n) bps_cnt <= 8'd0;else if(bps_cnt == 8'd159 | (bps_cnt == 8'd12 && (START_BIT > 2)))bps_cnt <= 8'd0;else if(bps_clk)bps_cnt <= bps_cnt + 1'b1;elsebps_cnt <= bps_cnt;
//Rx_Done信号always@(posedge Clk or negedge Rst_n)if(!Rst_n)Rx_Done <= 1'b0;else if(bps_cnt == 8'd159)Rx_Done <= 1'b1;elseRx_Done <= 1'b0;// always@(posedge Clk or negedge Rst_n)
// if(!Rst_n)
// data_byte <= 8'd0;
// else if(bps_cnt == 8'd159)
// data_byte <= tmp_data_byte;
// else
// data_byte <= data_byte;//采样6次,1出现4、5、6次,判断为1 1出现3、2、1、0判断为0
//采样数据接收模块设计 always@(posedge Clk or negedge Rst_n)if(!Rst_n)data_byte <= 8'd0;else if(bps_cnt == 8'd159)begindata_byte[0] <= r_data_byte[0][2];data_byte[1] <= r_data_byte[1][2];data_byte[2] <= r_data_byte[2][2];data_byte[3] <= r_data_byte[3][2];data_byte[4] <= r_data_byte[4][2];data_byte[5] <= r_data_byte[5][2];data_byte[6] <= r_data_byte[6][2];data_byte[7] <= r_data_byte[7][2];end
//*********************3.线性序列机的思想-采样数据接收模块***********************// always@(posedge Clk or negedge Rst_n)if(!Rst_n)beginSTART_BIT = 3'd0;r_data_byte[0] <= 3'd0;r_data_byte[1] <= 3'd0;r_data_byte[2] <= 3'd0;r_data_byte[3] <= 3'd0;r_data_byte[4] <= 3'd0;r_data_byte[5] <= 3'd0;r_data_byte[6] <= 3'd0;r_data_byte[7] <= 3'd0;STOP_BIT = 3'd0;endelse if(bps_clk)begincase(bps_cnt)0:beginSTART_BIT = 3'd0;r_data_byte[0] <= 3'd0;r_data_byte[1] <= 3'd0;r_data_byte[2] <= 3'd0;r_data_byte[3] <= 3'd0;r_data_byte[4] <= 3'd0;r_data_byte[5] <= 3'd0;r_data_byte[6] <= 3'd0;r_data_byte[7] <= 3'd0;STOP_BIT = 3'd0; end6,7,8,9,10,11:START_BIT <= START_BIT + s1_Rs232_Rx;22,23,24,25,26,27:r_data_byte[0] <= r_data_byte[0] + s1_Rs232_Rx;38,39,40,41,42,43:r_data_byte[1] <= r_data_byte[1] + s1_Rs232_Rx;54,55,56,57,58,59:r_data_byte[2] <= r_data_byte[2] + s1_Rs232_Rx;70,71,72,73,74,75:r_data_byte[3] <= r_data_byte[3] + s1_Rs232_Rx;86,87,88,89,90,91:r_data_byte[4] <= r_data_byte[4] + s1_Rs232_Rx;102,103,104,105,106,107:r_data_byte[5] <= r_data_byte[5] + s1_Rs232_Rx;118,119,120,121,122,123:r_data_byte[6] <= r_data_byte[6] + s1_Rs232_Rx;134,135,136,137,138,139:r_data_byte[7] <= r_data_byte[7] + s1_Rs232_Rx;150,151,152,153,154,155:STOP_BIT <= STOP_BIT + s1_Rs232_Rx;default:beginSTART_BIT = START_BIT;r_data_byte[0] <= r_data_byte[0];r_data_byte[1] <= r_data_byte[1];r_data_byte[2] <= r_data_byte[2];r_data_byte[3] <= r_data_byte[3];r_data_byte[4] <= r_data_byte[4];r_data_byte[5] <= r_data_byte[5];r_data_byte[6] <= r_data_byte[6];r_data_byte[7] <= r_data_byte[7];STOP_BIT = STOP_BIT; endendcaseendalways@(posedge Clk or negedge Rst_n)if(!Rst_n)uart_state <= 1'b0;else if(nedege)uart_state <= 1'b1;else if(Rx_Done || (bps_cnt == 8'd12 && (START_BIT > 2)))uart_state <= 1'b0;elseuart_state <= uart_state; endmodule
1.2仿真代码
`timescale 1ns/100ps
`define sys_period 20
module uart_rx_tb();reg Clk ;
reg Rst_n ;
reg rx ;
wire [7:0] Po_date ;
wire Po_flag ;uart_byte_rx u1(.Clk(Clk), //模块时钟50M.Rst_n(Rst_n), //模块复位.baud_set(3'd0), //波特率设置.Rs232_Rx(rx), //RS232数据输入.data_byte(Po_date), //并行数据输出.Rx_Done(Po_flag) //一次数据接收完成标志);initial beginClk=1; Rst_n=0; rx =1;#20; Rst_n=1;
end
initial begin#200;rx_bt(8'haa);rx_bt(8'h55);rx_bt(8'h37);rx_bt(8'd3);rx_bt(8'd4);rx_bt(8'd5);rx_bt(8'd6);rx_bt(8'd7);#200;$stop;
end
always #(`sys_period/2) Clk=~Clk; //任务task
//波特率为9600,波特率周期为1/9600=104167ns,时钟周期为20ns,104167/20=5208;
task rx_bt; //task 任务名称input [7:0] date; //端口申明integer i; //数据类型申明for(i=0;i<10;i=i+1)begin //功能描述case(i)0: rx=0;1: rx=date[0];2: rx=date[1];3: rx=date[2];4: rx=date[3];5: rx=date[4];6: rx=date[5];7: rx=date[6];8: rx=date[7];9: rx=1;endcase#(`sys_period*5208); end
endtask
endmodule
1.3仿真结果
2 ROM中存储正弦波信号
2.1 使用MATLAB生成mif文件
depth =256;%采样深度,即采样个数
widths =12 ;%采样数据位宽
N=0:255;%采样时刻,采样频率为1;0:1:255的简写
s= sin(2*pi*N/255);%信号生成fidc = fopen('C:\Users\11439\Desktop\date\SinData\SinData\SinData.mif','w'); %创建mif文件
%写入mif文件的开头
fprintf(fidc,'depth=%d\n;',depth);
fprintf(fidc,'width=%d\n;',widths);
fprintf(fidc,'address_radix=UNS;\n');%地址格式,UNS表示保持现有格式
fprintf(fidc,'data_radix=UNS;\n');%数据格式
fprintf(fidc,'content begin\n');
%采样数据的输出
for x =1:depth fprintf(fidc,'%d:%d;\n',x-1,round(1023*sin(2*pi*(x-1)/255)+1024));
end%round(A)将A中的元素按最近的整数取整,即四舍五入;数据为x-1:round(A(x)),其中x-1为采样时刻,A(x)为采样数据。
fprintf(fidc,'end;');%对应fprintf(fidc,'content begin\n')
fclose(fidc);
L=1023*sin(2*pi*(N-1)/255)+1024;
plot(L);
2.2 ROM_IP核调用
2.3仿真代码
`timescale 1ns/1ps
`define sys_period 20
module ROM_12x256_tb();
reg Clk ;
integer i ;
reg [7:0] addr;
wire [11:0] q;
rom12X256 rom12X256_inst (.address ( addr ),.clock (Clk),.q ( q ));
initial Clk=0;
always #(`sys_period/2) Clk=~Clk;initial beginaddr = 0;#21;for(i=0;i<256;i=i+1)begin#`sys_period;addr = addr + 1; end#(`sys_period * 50);$stop; endendmodule
2.4仿真结果
如何在modelsim中中查看生成的模拟信号:
3.DAC驱动
3.1功能代码
信号名称 | I/O | 功能描述 |
---|---|---|
Clk | I | 系统时钟 |
Rst_n | I | 系统复位信号 |
Start | I | 模块使能控制 |
Dac_data[15:0] | I | 控制器控制字 |
Set_Done | O | 更新DAC完成标志,每次完成更新产生一个高电平脉冲,脉冲宽度为1个时钟周期 |
CS_N | O | TLV5618的CS_N接口 |
DIN | O | TLV5618的DIN接口 |
SCLK | O | TLV5618的SCLK接口 |
DAC_STATE | O | 模块状态标识,低电平时为忙状态,高电平为空闲状态 |
module TLV5618(input Clk,input Rst_n,input Start,input [15:0] Dac_data,output reg Set_Done,output reg CS_N,output reg DIN,output reg SCLK,output wire DAC_STATE
);
parameter DIV_PARAM = 4;reg en;
reg SCLK2X;//2倍SCLK
reg [7:0] DIV_CNT;//分频计数器最大值
reg [5:0] SCLK_GEN_CNT;
reg [15:0] R_Dac_data;
wire trans_done;//转换完成标志信号//转换使能信号
always @(posedge Clk or negedge Rst_n)if(!Rst_n)en<=1'b0;else if(Start)en<=1'b1;else if(trans_done)en<=1'b0;elseen<=en;
//读取数据
always @(posedge Clk or negedge Rst_n)if(!Rst_n)R_Dac_data<=16'b0;else if(Start)R_Dac_data<=Dac_data;else R_Dac_data<=R_Dac_data;
//**************************生成SCLK2X******************//
//生成2倍分频计数器
always @(posedge Clk or negedge Rst_n)if(!Rst_n)DIV_CNT<=8'd0;else if(en) beginif(DIV_CNT==DIV_PARAM-1'b1 || trans_done)DIV_CNT<=8'd0;elseDIV_CNT<=DIV_CNT+1'B1;endelseDIV_CNT<=8'd0;
//产生2倍SCLK使能时钟计数器
always @(posedge Clk or negedge Rst_n)if(!Rst_n)SCLK2X<=1'd0;else if(en&&(DIV_CNT==DIV_PARAM-1'b1))SCLK2X<=1'd1;elseSCLK2X<=1'D0;
//SCLK_GEN_CNT
always @(posedge Clk or negedge Rst_n)if(!Rst_n)SCLK_GEN_CNT<=6'd0;else if(en && SCLK2X) beginif(SCLK_GEN_CNT==6'D33)SCLK_GEN_CNT<=6'd0;elseSCLK_GEN_CNT<=SCLK_GEN_CNT+1'B1;endelseSCLK_GEN_CNT<=SCLK_GEN_CNT;
//依次将数据数据转移到DAC芯片
always @(posedge Clk or negedge Rst_n)if(!Rst_n) beginCS_N<=1'b1;DIN<=1'b1;SCLK<=1'b0;endelse if(!Set_Done && SCLK2X) begincase(SCLK_GEN_CNT)0:begin CS_N<=1'B0;SCLK<=1'B1;DIN<=R_Dac_data[15];end1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31:SCLK<=1'B0;2:begin SCLK<=1'B1;DIN<=R_Dac_data[14]; end4:begin SCLK<=1'B1;DIN<=R_Dac_data[13]; end6:begin SCLK<=1'B1;DIN<=R_Dac_data[12]; end8:begin SCLK<=1'B1;DIN<=R_Dac_data[11]; end10:begin SCLK<=1'B1;DIN<=R_Dac_data[10]; end12:begin SCLK<=1'B1;DIN<=R_Dac_data[9]; end14:begin SCLK<=1'B1;DIN<=R_Dac_data[8]; end16:begin SCLK<=1'B1;DIN<=R_Dac_data[7]; end18:begin SCLK<=1'B1;DIN<=R_Dac_data[6]; end20:begin SCLK<=1'B1;DIN<=R_Dac_data[5]; end22:begin SCLK<=1'B1;DIN<=R_Dac_data[4]; end24:begin SCLK<=1'B1;DIN<=R_Dac_data[3]; end26:begin SCLK<=1'B1;DIN<=R_Dac_data[2]; end28:begin SCLK<=1'B1;DIN<=R_Dac_data[1]; end30:begin SCLK<=1'B1;DIN<=R_Dac_data[0]; end32:begin SCLK<=1'B1; end33:begin CS_N<=1'B1; enddefault:;endcaseend
//
assign trans_done=(SCLK_GEN_CNT==6'd33)&&SCLK2X;
//DA转换标记信号
always @(posedge Clk or negedge Rst_n)if(!Rst_n) Set_Done<=1'B0;else if(trans_done)Set_Done<=1'b1;elseSet_Done<=1'b0;
//DA状态标记信号:0为忙碌,1为空闲
assign DAC_STATE=CS_N;
endmodule
3.2 仿真代码
`timescale 1ns/1ps
`define sys_period 20
module TLV5618_tb();
reg Clk ;
reg Rst_n ;
reg Start ;
reg [15:0] Dac_data ;wire Set_Done ;
wire CS_N ;
wire DIN ;
wire SCLK ;
wire DAC_STATE;TLV5618 U1(.Clk (Clk),.Rst_n (Rst_n),.Start (Start),.Dac_data (Dac_data),.Set_Done (Set_Done),.CS_N (CS_N),.DIN (DIN),.SCLK (SCLK),.DAC_STATE (DAC_STATE)
);initial Clk=0;
always #(`sys_period/2) Clk=~Clk;initial beginRst_n=0;Start=0;Dac_data=16'h55aa;#(`sys_period*10+1);Rst_n=1;#(`sys_period*10);Start=1;#(`sys_period);Start=0;#(`sys_period*200);Dac_data=16'ha5a5;#(`sys_period*10);Start=1;#(`sys_period);Start=0;#(`sys_period*200);$stop;
endendmodule
3.3仿真结果
4控制模块
4.1功能代码
信号名称 | I/O | 功能描述 |
---|---|---|
Clk | I | 系统时钟 |
Rst_n | I | 系统复位信号 |
data_byte | I | uart_rx传输的数据 |
Rx_Done | I | uart_rx传输结束标志 |
Set_Done | I | DAC转化完成标志信号 |
Start | O | DAC使能信号 |
addr | O | ROM地址信号 |
module TLV5618_Ctr(input Clk, //系统时钟input Rst_n, //系统复位input wire [7:0] data_byte, //uart_rx传输的数据input wire Rx_Done, //uart_rx传输结束标志input Set_Done, //DAC转化完成标志信号output reg Start, //DAC使能信号output reg [7:0] addr //rom地址信号
);
parameter chance = 4'b1100;
parameter right = 8'haa;always @(posedge Clk or negedge Rst_n)if(!Rst_n)Start<=1'b0;else if(((data_byte==right)&& Rx_Done) || Set_Done)Start<=1'b1;elseStart<=1'b0;always @(posedge Clk or negedge Rst_n)if(!Rst_n)addr<=8'd0;else if(Set_Done) addr<=addr+1'b1;endmodule
5.顶层模块
5.1功能代码
module Top_Ctl(input Clk, input Rst_n,input Rs232_Rx,output wire CS_N,output wire DIN,output wire SCLK,output wire DAC_STATE
);
parameter chance_A = 4'B1100;
parameter chance_B = 4'B0100;
parameter baud_set = 3'd0;
wire [7:0] data_byte;
wire Rx_Done;
wire Set_Done;
wire [7:0] addr;
wire Start;
wire [11:0] q;uart_byte_rx uart_byte_rxinst0(.Clk(Clk), //模块时钟50M.Rst_n(Rst_n), //模块复位.baud_set(3'd0), //波特率设置.Rs232_Rx(Rs232_Rx), //RS232数据输入.data_byte(data_byte), //并行数据输出.Rx_Done(Rx_Done) //一次数据接收完成标志);TLV5618_Ctr TLV5618_Ctrinst0(.Clk(Clk),.Rst_n(Rst_n),.data_byte(data_byte),.Rx_Done(Rx_Done),.Set_Done(Set_Done),.Start(Start),.addr(addr)
);ROM12X256 ROM12X256_inst (.address (addr),.clock (Clk),.q ( q));TLV5618 TLV5618inst0(.Clk(Clk),.Rst_n(Rst_n),.Start(Start),.Dac_data({chance_A,q}),.Set_Done(Set_Done),.CS_N(CS_N),.DIN(DIN),.SCLK(SCLK),.DAC_STATE(DAC_STATE)
);
endmodule
5.2仿真代码
`timescale 1ns/100ps
`define sys_period 20
module Top_Ctl_tb();reg Clk ;
reg Rst_n ;
reg rx ;
wire CS_N ;
wire DIN ;
wire SCLK ;
wire DAC_STATE;Top_Ctl U1(.Clk(Clk), .Rst_n(Rst_n),.baud_set(3'd0),.Rs232_Rx(rx),.CS_N(CS_N),.DIN(DIN),.SCLK(SCLK),.DAC_STATE(DAC_STATE)
);initial beginClk=1; Rst_n=0; rx =1;#20; Rst_n=1;
end
initial begin#200;rx_bt(8'h55);rx_bt(8'h37);rx_bt(8'haa);#200000;
end
always #(`sys_period/2) Clk=~Clk; //任务task
//波特率为9600,波特率周期为1/9600=104167ns,时钟周期为20ns,104167/20=5208;
task rx_bt; //task 任务名称input [7:0] date; //端口申明integer i; //数据类型申明for(i=0;i<10;i=i+1)begin //功能描述case(i)0: rx=0;1: rx=date[0];2: rx=date[1];3: rx=date[2];4: rx=date[3];5: rx=date[4];6: rx=date[5];7: rx=date[6];8: rx=date[7];9: rx=1;endcase#(`sys_period*5208); end
endtask
endmodule
5.3仿真结果
5.4板机验证
基于FPGA的数据采集—信号产生篇相关推荐
- 基于FPGA的通信信号源设计
verilog实现基于FPGA的通信信号源设计 要求: 能够发射正弦波 对发出的正弦波进行2ask,2fsk,2psk,2dpsk调制 调制时用到PN序列(伪随机序列) 步骤: 第一步:产生两个频率不 ...
- 基于FPGA的AM信号调制与解调详细步骤
详细程序及原理参考原文: FPGA学习(二)--实现AM信号调制与解调 - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/p/37203478 使用的软件是Vivado ...
- 基于Java的数据采集(终结篇)
关于写过关于JAVA采集入库的三篇文章: 基于Java数据采集入库(一):http://www.cnblogs.com/lichenwei/p/3904715.html 基于Java数据采集入库(二) ...
- 【数据采集】基于FPGA通用数据采集测试系统
1.软件版本 quartusii12.1 2.本算法理论知识 本系统设计采用ADI公司的高速模数转换器AD9220实现波形信号的采集,AD9220最高采样速率可达10 MHz,采用外部晶体振荡器8 M ...
- 基于FPGA的数据采集、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RTC+Uart+AD7606数模转换+电流放大采集等硬件设计及程序验证)
本文主要介绍了学生期间自己做的一个小项目,便于学习初期对fpga的整体把握,涉及了很多常见.常用.常考和面试常问的知识点. 可以作为入门后的拓展学习和应对一些找工作的项目面试. 下面对硬件及软件代码进 ...
- 【信号采集】基于FPGA的高速信号采集系统
1.高速采集系统实现的功能,FPGA内部功能模块组成: 2.高速ADC接口的FPGA实现: 3.数字下变频(DDC)的FPGA实现: 4.三倍抽取功能的FPGA实现: 5.Aurora接口的FPGA实 ...
- 基于FPGA的FM信号解调
这是本人第一次写博客,写的不好请多多担待. 本次实验是将一个已知的FM信号通过FPGA进行解调,解调出波形并进行FFT得到调制频率fm,并且每一步都通过MATLAB进行波形的验证. 开发工具 VIVA ...
- 基于FPGA的无线传感器信号传输模块的设计
由于FPGA具有低功耗.集成度高.开发周期短.低成本.高性能等优点.因此本系统选用FPGA Spartan-6系列的XC6SLX9作为主控单元.采用三向振动传感器完成力学环境中振动量的测量.硬件系统包 ...
- 基于FPGA的AM信号的调制与解调
AM信号:(A+ma*cos(w0t))*cos(wct) 首先要产生两个频率不同的余弦波cos(w0t),cos(wct).可调用系统自带的DDS IP核来实现,这也是最简单的方法. 产生两个余弦波 ...
最新文章
- 拿到饿了么 P7 Offer,却一轮游途虎……
- 【思维导图-索引篇】搞定数据库索引就是这么简单
- linux shell sed 添加空行
- ync 小技巧-14-为用户启用统一的联系人存储库-Lync-无联系人
- js下拉 selenium_selenium 难定位元素,时间插件,下拉框定位,string
- sql 倒数第二个_小白初探SQL(一)
- oracle计算1到一百偶数的和,Perl 打印在1..100内所有偶数和奇数
- turtle库自动轨迹绘制
- hdu1290献给杭电五十周年校庆的礼物
- 如何界定你的竞争对手?
- MineCraft note
- 总结——达内视频(一)
- SlideShare:大话SSD (淘宝核心系统数据库组 褚霸)
- SAS Base备考
- Smartbi大数据在金融业的应用案例
- 《 种子用户方法论》读书笔记
- Oracle 中递归查询
- mysql date 24小时制_SpringBoor连接mysql数据库取数据库中时间格式是12小时制的时间,如何显示成24小时制...
- 机械原理复习试题及答案
- 感悟生活,再来聊聊拼多多
热门文章
- PDF编辑/PDF浏览/PDF打印:PDFPrinting.NET Crack
- PHP正则表达式提取html超链接中的h…
- layui upload上传文件时动态设置headers参数值
- HIVE的搭建配置及关联MySQL
- 德国留学计算机 马普所,刚拿到马普所offer, 回报园中战友,简单介绍一下经历希望提供一点参考...
- 适合创业起步看的书推荐
- 查看Eclipse32位还是64位,查看JDK是32位还是64位
- 圣斗士星矢重生服务器维护,11月26日全服停机维护公告
- QT:QBitArray
- Excel.Application组件使用方法 matlab可以参考使用