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

你可能感兴趣的:(XilinxFPGA)