文章目录

  • 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的数据采集—信号产生篇相关推荐

  1. 基于FPGA的通信信号源设计

    verilog实现基于FPGA的通信信号源设计 要求: 能够发射正弦波 对发出的正弦波进行2ask,2fsk,2psk,2dpsk调制 调制时用到PN序列(伪随机序列) 步骤: 第一步:产生两个频率不 ...

  2. 基于FPGA的AM信号调制与解调详细步骤

    详细程序及原理参考原文: FPGA学习(二)--实现AM信号调制与解调 - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/p/37203478 使用的软件是Vivado ...

  3. 基于Java的数据采集(终结篇)

    关于写过关于JAVA采集入库的三篇文章: 基于Java数据采集入库(一):http://www.cnblogs.com/lichenwei/p/3904715.html 基于Java数据采集入库(二) ...

  4. 【数据采集】基于FPGA通用数据采集测试系统

    1.软件版本 quartusii12.1 2.本算法理论知识 本系统设计采用ADI公司的高速模数转换器AD9220实现波形信号的采集,AD9220最高采样速率可达10 MHz,采用外部晶体振荡器8 M ...

  5. 基于FPGA的数据采集、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RTC+Uart+AD7606数模转换+电流放大采集等硬件设计及程序验证)

    本文主要介绍了学生期间自己做的一个小项目,便于学习初期对fpga的整体把握,涉及了很多常见.常用.常考和面试常问的知识点. 可以作为入门后的拓展学习和应对一些找工作的项目面试. 下面对硬件及软件代码进 ...

  6. 【信号采集】基于FPGA的高速信号采集系统

    1.高速采集系统实现的功能,FPGA内部功能模块组成: 2.高速ADC接口的FPGA实现: 3.数字下变频(DDC)的FPGA实现: 4.三倍抽取功能的FPGA实现: 5.Aurora接口的FPGA实 ...

  7. 基于FPGA的FM信号解调

    这是本人第一次写博客,写的不好请多多担待. 本次实验是将一个已知的FM信号通过FPGA进行解调,解调出波形并进行FFT得到调制频率fm,并且每一步都通过MATLAB进行波形的验证. 开发工具 VIVA ...

  8. 基于FPGA的无线传感器信号传输模块的设计

    由于FPGA具有低功耗.集成度高.开发周期短.低成本.高性能等优点.因此本系统选用FPGA Spartan-6系列的XC6SLX9作为主控单元.采用三向振动传感器完成力学环境中振动量的测量.硬件系统包 ...

  9. 基于FPGA的AM信号的调制与解调

    AM信号:(A+ma*cos(w0t))*cos(wct) 首先要产生两个频率不同的余弦波cos(w0t),cos(wct).可调用系统自带的DDS IP核来实现,这也是最简单的方法. 产生两个余弦波 ...

最新文章

  1. 拿到饿了么 P7 Offer,却一轮游途虎……
  2. 【思维导图-索引篇】搞定数据库索引就是这么简单
  3. linux shell sed 添加空行
  4. ync 小技巧-14-为用户启用统一的联系人存储库-Lync-无联系人
  5. js下拉 selenium_selenium 难定位元素,时间插件,下拉框定位,string
  6. sql 倒数第二个_小白初探SQL(一)
  7. oracle计算1到一百偶数的和,Perl 打印在1..100内所有偶数和奇数
  8. turtle库自动轨迹绘制
  9. hdu1290献给杭电五十周年校庆的礼物
  10. 如何界定你的竞争对手?
  11. MineCraft note
  12. 总结——达内视频(一)
  13. SlideShare:大话SSD (淘宝核心系统数据库组 褚霸)
  14. SAS Base备考
  15. Smartbi大数据在金融业的应用案例
  16. 《 种子用户方法论》读书笔记
  17. Oracle 中递归查询
  18. mysql date 24小时制_SpringBoor连接mysql数据库取数据库中时间格式是12小时制的时间,如何显示成24小时制...
  19. 机械原理复习试题及答案
  20. 感悟生活,再来聊聊拼多多

热门文章

  1. PDF编辑/PDF浏览/PDF打印:PDFPrinting.NET Crack
  2. PHP正则表达式提取html超链接中的h…
  3. layui upload上传文件时动态设置headers参数值
  4. HIVE的搭建配置及关联MySQL
  5. 德国留学计算机 马普所,刚拿到马普所offer, 回报园中战友,简单介绍一下经历希望提供一点参考...
  6. 适合创业起步看的书推荐
  7. 查看Eclipse32位还是64位,查看JDK是32位还是64位
  8. 圣斗士星矢重生服务器维护,11月26日全服停机维护公告
  9. QT:QBitArray
  10. Excel.Application组件使用方法 matlab可以参考使用