⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac_spi.v

📁 32位单精度浮点加法器
💻 V
字号:
//-----------------------------------------------------------------------------//  //  Copyright (c) 2009 Xilinx Inc.////  Project  : Programmable Wave Generator//  Module   : dac_spi.v//  Parent   : wave_gen//  Children : None////  Description: //     This module takes each sample generated by the sample generator and//     sends it to the digital to analog converter (DAC) using the SPI//     protocol. Each SPI cycle is 32 clocks long, consisting of an address,//     command, and 16 bits of data (MSbit first). The DAC on the development//     boards use only the most significant 12 out of the 16 bit samples, but//     all 16 bits are transmitted.////  Parameters:////  Local Parameters:////  Notes       : ////  Multicycle and False Paths//    None.////`timescale 1ns/1psmodule dac_spi (  input             clk_tx,       // Clock input  input             rst_clk_tx,   // Active HIGH reset - synchronous to clk_tx  input             en_clk_samp,  // Last clk_tx phase of clk_samp  input      [15:0] samp,         // Sample output  input             samp_val,     // New sample is available  // D to A converter outputs  output            spi_clk_o,    // Clock for SPI - generated by DDR flop  output reg        spi_mosi_o,   // SPI master-out-slave-in data bit  output reg        dac_cs_n_o,   // Chip select for DAC  output reg        dac_clr_n_o   // Active low clear);//***************************************************************************// Parameter definitions//***************************************************************************//***************************************************************************// Reg and Wire declarations//***************************************************************************  wire [31:0] data_to_send; // Data to serialize to the DAC  reg         active;       // Indicates that this module is sending a seq  reg         old_active;   // The value of active on the last clock  reg  [4:0]  bit_cnt;      // Counts from 30 to 0  //***************************************************************************// Code//***************************************************************************  // Generate dac_clr_n - asserted only when internal reset is asserted  always @(posedge clk_tx)  begin    if (rst_clk_tx)    begin      dac_clr_n_o     <= 1'b0;    end    else    begin      dac_clr_n_o     <= 1'b1;    end // if rst_clk_tx  end // always   // We start a new sequence when samp_val is asserted, and this is the   // "active" phase (i.e. the last one) of clk_samp  assign start_spi = samp_val && en_clk_samp;  assign data_to_send   = {    8'b0000_0000,      // Don't care    4'b0011,           // Write to an Update (Power Up) ch, N    4'b0000,           // Channel A    samp               // The sample to send  };  // Generate the output  always @(posedge clk_tx)  begin    if (rst_clk_tx)    begin      active       <= 1'b0;      old_active   <= 1'b0;      bit_cnt      <= 5'b00000;      dac_cs_n_o   <= 1'b1;      // Active low      spi_mosi_o   <= 1'b1;      // Idle at 1'b1    end    else    begin      old_active   <= active;      if (!active)      begin        if (start_spi)        begin          active       <= 1'b1;             // Go active          dac_cs_n_o   <= 1'b0;             // Set CS active          spi_mosi_o   <= data_to_send[31]; // Send the first bit of the seq          bit_cnt      <= 5'd30;            // We have already sent 31        end //         else        begin          dac_cs_n_o   <= 1'b1;             // INACTIVE          spi_mosi_o   <= 1'b1;        end      end      else // we are currently active      begin        spi_mosi_o <= data_to_send[bit_cnt];        if (bit_cnt == 5'b00000) // This is the last bit        begin          active  <= 1'b0;        end        else // Not the last bit        begin          bit_cnt <= bit_cnt - 1'b1;        end      end    end // if rst  end // always    // Generate the SPI clock using the DDR flop    out_ddr_flop out_ddr_flop_spi_clk_i0 (    .clk     (clk_tx),    .rst     (rst_clk_tx),    .d_rise  (1'b0),    .d_fall  (active || old_active),    .q       (spi_clk_o)  );endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -