相位累加器原理及累加器代碼
在中央處理器中,累加器(accumulator) 是一種寄存器,用來(lái)儲(chǔ)存計(jì)算產(chǎn)生的中間結(jié)果。如果沒有像累加器這樣的寄存器,那么在每次計(jì)算 (加法,乘法,移位等等) 后就必須要把結(jié)果寫回到內(nèi)存,也許馬上就得讀回來(lái)。然而存取主存的速度是比從算術(shù)邏輯單元到有直接路徑的累加器存取更慢。
標(biāo)準(zhǔn)的例子就是把一列的數(shù)字加起來(lái)。一開始累加器設(shè)定為零,每個(gè)數(shù)字依序地被加到累加器中,當(dāng)所有的數(shù)字都被加入后,結(jié)果才寫回到主存中。
現(xiàn)今的 CPU 通常有很多寄存器,所有或多數(shù)都可以被用來(lái)當(dāng)作累加器。因?yàn)檫@個(gè)原因,“累加器” 這名詞就顯得有些老舊。這個(gè)名詞已經(jīng)幾乎不在微處理器寄存器中使用,例如,運(yùn)算寄存器的名稱中的符號(hào)以 “A” 開頭的表示是從 “accumulator” 這個(gè)歷史因素得來(lái)的 (有時(shí)候認(rèn)為并非 “arithmetic”)。也可能混淆的是寄存器的名字前置 “A” 也表示 “address”,比如說(shuō)像是Motorola 68000家族。
早期的 4 位、8 位微處理器,典型具有單個(gè)累加器。8051微控制器有兩個(gè)累加器:主累加器與從累加器,其中的從累加器只用于乘法(MUL AB)與除法(DIV AB)。乘法的 16 位結(jié)果放入兩個(gè) 8 位累加器中。除法時(shí),商放入主累加器,余數(shù)放入從累加器。8008的直接后繼產(chǎn)品——8080與8086,開創(chuàng)了x86指令集體系結(jié)構(gòu),仍然使用兩個(gè)累加器:主累加器 EAX 與從累加器 EDX 用于乘法與除法的大數(shù)運(yùn)算。例如,MUL ECX 將把兩個(gè) 32 位寄存器 ECX 與 EAX 相乘,64 位結(jié)果放入 EAX 與 EDX。但是 MUL 與 DIV 之外的其他算術(shù)——邏輯指令(ADD、SUB、CMP、AND、OR、XOR、TEST)可以使用 8 個(gè)寄存器:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI 作為目的操作數(shù)(即存儲(chǔ)結(jié)果的位置)。
相位累加器原理
一個(gè)正弦波,雖然它的幅度不是線性的,但是它的相位卻是線性增加的。
DDS 正是利用了這一特點(diǎn)來(lái)產(chǎn)生正弦信號(hào)。如圖 2,根據(jù)DDS 的頻率控制字的位數(shù)N,把360° 平均分成了2的N次等份。
圖2,相位累加器原理
假設(shè)系統(tǒng)時(shí)鐘為Fc,輸出頻率為Fout。每次轉(zhuǎn)動(dòng)一個(gè)角度360°/2N, 則可以產(chǎn)生一個(gè)頻率為Fc/2N 的正弦波的相位遞增量。那么只要選擇恰當(dāng)?shù)念l率控制字M,使得 Fout / Fc= M / 2N,就可以得到所需要的輸出頻率Fout,
Fout = Fc*M / 2N,相位幅度轉(zhuǎn)換通過相位累加器,我們已經(jīng)得到了合成Fout 頻率所對(duì)應(yīng)的相位信息,然后相位幅度轉(zhuǎn)換器把0°~360°的相位轉(zhuǎn)換成相應(yīng)相位的幅度值。比如當(dāng)DDS 選擇為2V p-p 的輸出時(shí),45°對(duì)應(yīng)的幅度值為0.707V,這個(gè)數(shù)值以二進(jìn)制的形式被送入DAC。這個(gè)相位到幅度的轉(zhuǎn)換是通過查表完成的。
DAC 輸出代表幅度的二進(jìn)制數(shù)字信號(hào)被送入DAC 中,并轉(zhuǎn)換成為模擬信號(hào)輸出。注意DAC 的位數(shù)并不影響輸出頻率的分辨率。輸出頻率的分辨率是由頻率控制字的位數(shù)決定的。
累加器代碼
module counter (co, reset, data, ci, clk);
parameter N=4;
output co;
input reset, ci, clk;
input[N-1:0]data;
reg [N-1:0] q ;
// ???-1|?ü?èê?
always @(posedge clk)
begin
if (reset) q《=0;//
else
if(ci) q《=q + 1;
end
assign co=(q==data-1) && ci; //
endmodule
非常好我支持^.^
(28) 80%
不好我反對(duì)
(7) 20%
相關(guān)閱讀:
- [電子說(shuō)] 學(xué)習(xí)STM32F103的ADC功能 2023-10-24
- [電子說(shuō)] 學(xué)習(xí)STM32F103的DAC功能 2023-10-24
- [電子說(shuō)] 學(xué)習(xí)STM32F103的定時(shí)器功能 2023-10-24
- [電子說(shuō)] STM32基礎(chǔ)知識(shí):定時(shí)器的PWM輸出功能 2023-10-24
- [電子說(shuō)] 既然ODR能控制管腳高低電平,為什么還需要BSRR寄存器呢? 2023-10-24
- [電子說(shuō)] ARM系列-P Channel簡(jiǎn)析 2023-10-24
- [控制/MCU] 基于STM32F429芯片的單片機(jī)芯片內(nèi)存映射圖 2023-10-23
- [電子說(shuō)] 軟硬件交互的角度將中斷的知識(shí)梳理 2023-10-22
( 發(fā)表人:李倩 )