天天看点

FPGA控制DAC输出正弦波、三角波

第一步:生成波形coe文件

第二步:将coe文件添加到ROM中

第三步:控制FPGA刷新输出ROM中的数据:

//----刷新频率设置参数  dac_data

always @(posedge i_clk or negedge i_rstn) begin

if(!i_rstn) begin

update_clk <= 1'b0 ;

counter_updateclk <= 8'b0 ;

end

else if(counter_updateclk >= dac_data) begin

update_clk <= ~update_clk ;

counter_updateclk <= 8'b0 ;

end

else begin

counter_updateclk <= counter_updateclk + 1'b1 ;

end

end

//update cycle check

assign rising_edge = (update_clk_temp==2'b01);

always @(posedge i_clk or negedge i_rstn) begin

if(!i_rstn) begin

update_clk_temp <= 2'b0 ;

end

else begin

update_clk_temp <= {update_clk_temp[0],update_clk};

end

end

//start send generator 每次从ROM中读取一个数据

always @(posedge i_clk or negedge i_rstn) begin

if(!i_rstn) begin

m_din <= 24'b0 ;

m_spi_start <= 1'b0 ;

end

else if(rising_edge) begin

m_din <= {8'b0,rom_douta[15:0]} ;

m_spi_start <= 1'b1 ;

end

else begin

m_din <= 24'b0 ;

m_spi_start <= 1'b0 ;

end

end

//LUT rom address generator 每个上升沿让ROM地址加1

always @(posedge i_clk or negedge i_rstn) begin

if(!i_rstn) begin

rom_addra[9:0] <= 10'b0    ;

end

else if(rising_edge) begin

if(rom_addra[9:0]>=10'd1023) begin

rom_addra[9:0] <= 10'b0 ;

end

else begin

rom_addra[9:0] <= rom_addra[9:0] + 1'b1 ;

end

end

else begin

rom_addra[9:0] <= rom_addra[9:0] ;

end

end