<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > DDS直接數(shù)字合成3 - 相位累加器

          DDS直接數(shù)字合成3 - 相位累加器

          作者: 時(shí)間:2024-01-16 來源:EEPW編譯 收藏

          的第二個(gè)技巧是長。 它允許來自輸出的信號(hào)頻率非常靈活。

          本文引用地址:http://www.ex-cimer.com/article/202401/454851.htm

          我們將通過一個(gè)示例了解它是如何工作的。 讓我們從這個(gè)簡單的代碼開始。

          reg [10:0] cnt;   // 11bit counter
          always @(posedge clk) cnt <= cnt + 11'h1;

          sine_lookup my_sine(.clk(clk), .addr(cnt), .value(sine_lookup_output));

          計(jì)數(shù)器實(shí)際上是一個(gè)“”。 那是因?yàn)樗看芜f增,它都會(huì)將正弦波移動(dòng) 360°/2048=0.175°

          因此,讓我們將計(jì)數(shù)器重命名為更好的名稱。

          reg [10:0] phase_acc;   // 11bit
          always @(posedge clk) phase_acc <= phase_acc + 11'h1;

          sine_lookup my_sine(.clk(clk), .addr(phase_acc), .value(sine_lookup_output));

          現(xiàn)在,如果我們想將正弦輸出的頻率提高一倍,我們將增加 2 而不是 1。

          always @(posedge clk) phase_acc <= phase_acc + 11'h2;

          但是,如果我們想將頻率減半呢?我們運(yùn)氣不好,因?yàn)槲覀儾荒軐⑾辔焕奂悠髟黾?0.5(Verilog 僅支持整數(shù))。 我們需要的是相位累加器的更高分辨率。

          讓我們看看如何通過向相位累加器添加更多位來完成它,但現(xiàn)在以提供與 11 位相位累加器相同的輸出的方式完成。

          reg [14:0] phase_acc;   // 4 more bits, for a total of 15 bits
          always @(posedge clk) phase_acc <= phase_acc + 15'd16;   // increment by 16 instead of 1

          sine_lookup my_sine(.clk(clk), .addr(phase_acc[14:4]), .value(sine_lookup_output));   // shifted lookup address

          由于我們將計(jì)數(shù)器遞增 16 并在查找地址中使用 phase_acc[14:4],因此我們沒有更改輸出。 但是多四個(gè)位為我們提供了一個(gè)具有更好分辨率的相位累加器。 現(xiàn)在,我們當(dāng)然可以將輸出頻率減半(通過將相位累加器增加 8 而不是 16)。

          將相位累加器分辨率提高 16 后,我們可以以 1/16 步長獲得原始正弦頻率的任意倍數(shù)。 我們當(dāng)然可以在相位累加器上增加四個(gè)以上的位。 典型的實(shí)現(xiàn)使用非常長的位相位累加器,以在可用的輸出頻率中具有極高的精度和分辨率。

          例如,使用32位相位累加器和100MHz時(shí)鐘,輸出的頻率分辨率為0.023Hz!
          這是一個(gè) 32 位相位累加器,用于從 440MHz 時(shí)鐘生成 100Hz 信號(hào)。

          reg [31:0] phase_acc;   // 32bit phase accumulator
          always @(posedge clk) phase_acc <= phase_acc + 18898;   // 440Hz output when clocked at 100MHz

          sine_lookup my_sine(.clk(clk), .addr(phase_acc[31:21]), .value(sine_lookup_output));

          雖然 440Hz 相當(dāng)慢,但使用上述代碼可以實(shí)現(xiàn)高達(dá) 50MHz(或接近 <>MHz)的輸出頻率。 只需修改相位累加器增量即可。

          上一篇:DDS直接數(shù)字合成2 - 任意信號(hào)

          下一篇:DDS直接數(shù)字合成4 - 插值



          關(guān)鍵詞: FPGA DDS 相位累加器

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();