M
mbalakr2
Guest
Здравейте всички,
Аз работя за проектиране цифров преобразувател Down и цифрови Up преобразувател.Започнах чрез проектиране на NCO използвайки CORDIC алгоритъм за определяне на Digital преобразуване.Аз написах VHDL код за NCO в Qu (AT) rtus II и получени приблизителната резултати за определяне на преобразуване.Аз съм се опитват да приложат същата CORDIC NCO за конверсионно.Аз съм тестове по хранене в изхода на NCO че предназначени за определяне на преобразуване.Аз настроите X вход както 0,309 (COS 72) и Y вход както 0,951 (Sin 72).Аз съм очакват производство от 0,607, което е величината на двата входа и фаза под ъгъл 72.Но аз не съм в състояние да се получи това.Може някой, моля да ми помогне с код?АЗ имам никакъв представа как да се процедира ..Кодът съм написал е даден по-долу:
Код:Библиотеката IEEE;
използване ieee.std_logic_1164.all;
използване ieee.std_logic_arith.all;
използване ieee.std_logic_unsigned.all;образувание ncoR е - Най-високо ниво Обект
родови
(
размер: число: = 20
);порт
(
clk: в std_logic;
нулиране: в std_logic;
x0: в std_logic_vector (размер-1 downto 0);
y0: в std_logic_vector (размер-1 downto 0);
z0: в std_logic_vector (размер-1 downto 0);
фаза: изложени std_logic_vector (размер-1 downto 0);
куадро: изложени std_logic_vector (размер-1 downto 0);
ъгъл: буфер std_logic_vector (размер-1 downto 0);
на проекта: в std_logic;
Съставено: изложени std_logic
);края ncoR;архитектурата дъга на ncoR есигнал cnt: std_logic_vector (4 downto 0);
сигнал newx: std_logic_vector (размер-1 downto 0);
сигнал newy: std_logic_vector (размер-1 downto 0);
сигнал newz: std_logic_vector (размер-1 downto 0);
сигнал xreg: std_logic_vector (размер-1 downto 0);
сигнал yreg: std_logic_vector (размер-1 downto 0);
сигнал zreg: std_logic_vector (размер-1 downto 0);
сигнал sxreg: std_logic_vector (размер-1 downto 0);
сигнал syreg: std_logic_vector (размер-1 downto 0);
сигнал АТАН: std_logic_vector (размер-1 downto 0);
сигнал перка: std_logic;
сигнал nxt: std_logic;
сигнал като: std_logic;
сигнал нас: std_logic;- Компонент декларациикомпонент addsubR - Адер
родови
(
размер: число: = 20
);порт
(
dataa: в std_logic_vector (размер-1 downto 0);
datab: в std_logic_vector (размер-1 downto 0);
Резултатът: изложени std_logic_vector (размер-1 downto 0);
като: по-std_logic
);
края компонент;компонент anglelut - Ъгъл Виж-Up Таблица
родови
(
размер: число: = 20
);порт
(
индекс: в std_logic_vector (4 downto 0);
ATAN: изложени std_logic_vector (размер-1 downto 0)
);
края компонент;компонент fsmR - краен членка Машиностроенепорт
(
clk: в std_logic;
нулиране: в std_logic;
на проекта: в std_logic;
cnt: в std_logic_vector (4 downto 0);
начална: изложени std_logic;
nxt: изложени std_logic;
Съставено: изложени std_logic
);края компонент;компонент shiftR - работник
родови
(
размер: число: = 20
);порт
(
данни: в std_logic_vector (размер-1 downto 0);
sdata: изложени std_logic_vector (размер-1 downto 0);
N: в std_logic_vector (4 downto 0)
);
края компонент;започвампроцес (clk, newx, newy, newz, z0, nxt, FIN)
започвам
ако (rising_edge (clk)) след това
ако перка = "1" и след това
xreg <= x0;
yreg <= y0;
zreg <= z0;
cnt <= (другите => "0");
elsif nxt = "1" и след това
xreg <= newx;
yreg <= newy;
zreg <= newz;
cnt <= cnt "1";
край, ако;
край, ако;
края процес;като <= yreg (размер-1); - MSB на Y регистър
фаза <= yreg;
куадро <= xreg;
ъгъл <= zreg;
нашата мрежа <= не (както);addx: addsubR - Акумулатор за X регистър
генерични сайта
(
размер => размер
)порт на сайта
(
dataa => xreg,
datab => syreg,
резултат => newx,
както => както
);addy: addsubR - Акумулатор за да се регистрирате
генерични сайта
(
размер => размер
)порт на сайта
(
dataa => yreg,
datab => sxreg,
резултат => newy,
както => нас
);addz: addsubR - Акумулатор за Z регистър
генерични сайта
(
размер => размер
)порт на сайта
(
dataa => zreg,
datab => ATAN,
резултат => newz,
както => както
);lut: anglelut
генерични сайта
(
размер => размер
)порт на сайта
(
Index => cnt,
ATAN => АТАН
);state_mach: fsmR
порт на сайта
(
clk => clk,
нулиране => нулиране,
на проекта => начало
cnt => cnt,
начална => перка,
nxt => nxt,
Съставено => Съставено
);shiftx: shiftR - преместване х стойност
генерични сайта
(
размер => размер
)порт на сайта
(
данни => xreg,
sdata => sxreg,
N => cnt
);находчив: shiftR - пренасочване Y стойност
генерични сайта
(
размер => размер
)порт на сайта
(
данни => yreg,
sdata => syreg,
N => cnt
);края арка;Търсене таблицаБиблиотеката IEEE;
използване IEEE.Std_Logic_1164.all;
използване IEEE.Std_Logic_arith.all;образувание anglelut еродови
(
размер: положителните: = 20
);
порт
(
индекс: в std_logic_vector (4 downto 0);
ATAN: изложени std_logic_vector (размер-1 downto 0)
);края anglelut;архитектурата таблица на anglelut Изразявасигнал tinfo: std_logic_vector (19 downto 0);започвамATAN <= tinfo;
процес (индекс)
започвамслучай индекс е
когато "00000" => tinfo <= X "3243F", - 45
когато "00001" => tinfo <= X "1DAC6"; - 26,565
когато "00010" => tinfo <= X "0FADB"; - 14,036
когато "00011" => tinfo <= X "07F56", - 7,125
когато "00100" => tinfo <= X "03FEA"; - 3,576
когато "00101" => tinfo <= X "01FFD"; - 1,789
когато "00110" => tinfo <= X "00FFF"; - 0,8951
когато "00111" => tinfo <= X "007FF"; - 0,4476
когато "01000" => tinfo <= X "003FF"; - 0,2238
когато "01001" => tinfo <= X "001FF"; - 0,1119
когато "01010" => tinfo <= X "000FF"; - 0,0559
когато "01011" => tinfo <= X "0007F"; - 0,0279
когато "01100" => tinfo <= X "0003F"; - 0,0139
когато "01101" => tinfo <= X "0001F"; - 0,00699
когато "01110" => tinfo <= X "0000F"; - 0,00349
когато "01111" => tinfo <= X "00007"; - 0,00174
когато "10000" => tinfo <= X "00003"; - 0,00087
когато "10001" => tinfo <= X "00001"; - 0,00043
когато "10010" => tinfo <= X "00000"; - 0,00021
когато "10011" => tinfo <= X "00000"; - 0,00010
когато другите => tinfo <= "--------------------";края случай;
края процес;
край масата;
Аз работя за проектиране цифров преобразувател Down и цифрови Up преобразувател.Започнах чрез проектиране на NCO използвайки CORDIC алгоритъм за определяне на Digital преобразуване.Аз написах VHDL код за NCO в Qu (AT) rtus II и получени приблизителната резултати за определяне на преобразуване.Аз съм се опитват да приложат същата CORDIC NCO за конверсионно.Аз съм тестове по хранене в изхода на NCO че предназначени за определяне на преобразуване.Аз настроите X вход както 0,309 (COS 72) и Y вход както 0,951 (Sin 72).Аз съм очакват производство от 0,607, което е величината на двата входа и фаза под ъгъл 72.Но аз не съм в състояние да се получи това.Може някой, моля да ми помогне с код?АЗ имам никакъв представа как да се процедира ..Кодът съм написал е даден по-долу:
Код:Библиотеката IEEE;
използване ieee.std_logic_1164.all;
използване ieee.std_logic_arith.all;
използване ieee.std_logic_unsigned.all;образувание ncoR е - Най-високо ниво Обект
родови
(
размер: число: = 20
);порт
(
clk: в std_logic;
нулиране: в std_logic;
x0: в std_logic_vector (размер-1 downto 0);
y0: в std_logic_vector (размер-1 downto 0);
z0: в std_logic_vector (размер-1 downto 0);
фаза: изложени std_logic_vector (размер-1 downto 0);
куадро: изложени std_logic_vector (размер-1 downto 0);
ъгъл: буфер std_logic_vector (размер-1 downto 0);
на проекта: в std_logic;
Съставено: изложени std_logic
);края ncoR;архитектурата дъга на ncoR есигнал cnt: std_logic_vector (4 downto 0);
сигнал newx: std_logic_vector (размер-1 downto 0);
сигнал newy: std_logic_vector (размер-1 downto 0);
сигнал newz: std_logic_vector (размер-1 downto 0);
сигнал xreg: std_logic_vector (размер-1 downto 0);
сигнал yreg: std_logic_vector (размер-1 downto 0);
сигнал zreg: std_logic_vector (размер-1 downto 0);
сигнал sxreg: std_logic_vector (размер-1 downto 0);
сигнал syreg: std_logic_vector (размер-1 downto 0);
сигнал АТАН: std_logic_vector (размер-1 downto 0);
сигнал перка: std_logic;
сигнал nxt: std_logic;
сигнал като: std_logic;
сигнал нас: std_logic;- Компонент декларациикомпонент addsubR - Адер
родови
(
размер: число: = 20
);порт
(
dataa: в std_logic_vector (размер-1 downto 0);
datab: в std_logic_vector (размер-1 downto 0);
Резултатът: изложени std_logic_vector (размер-1 downto 0);
като: по-std_logic
);
края компонент;компонент anglelut - Ъгъл Виж-Up Таблица
родови
(
размер: число: = 20
);порт
(
индекс: в std_logic_vector (4 downto 0);
ATAN: изложени std_logic_vector (размер-1 downto 0)
);
края компонент;компонент fsmR - краен членка Машиностроенепорт
(
clk: в std_logic;
нулиране: в std_logic;
на проекта: в std_logic;
cnt: в std_logic_vector (4 downto 0);
начална: изложени std_logic;
nxt: изложени std_logic;
Съставено: изложени std_logic
);края компонент;компонент shiftR - работник
родови
(
размер: число: = 20
);порт
(
данни: в std_logic_vector (размер-1 downto 0);
sdata: изложени std_logic_vector (размер-1 downto 0);
N: в std_logic_vector (4 downto 0)
);
края компонент;започвампроцес (clk, newx, newy, newz, z0, nxt, FIN)
започвам
ако (rising_edge (clk)) след това
ако перка = "1" и след това
xreg <= x0;
yreg <= y0;
zreg <= z0;
cnt <= (другите => "0");
elsif nxt = "1" и след това
xreg <= newx;
yreg <= newy;
zreg <= newz;
cnt <= cnt "1";
край, ако;
край, ако;
края процес;като <= yreg (размер-1); - MSB на Y регистър
фаза <= yreg;
куадро <= xreg;
ъгъл <= zreg;
нашата мрежа <= не (както);addx: addsubR - Акумулатор за X регистър
генерични сайта
(
размер => размер
)порт на сайта
(
dataa => xreg,
datab => syreg,
резултат => newx,
както => както
);addy: addsubR - Акумулатор за да се регистрирате
генерични сайта
(
размер => размер
)порт на сайта
(
dataa => yreg,
datab => sxreg,
резултат => newy,
както => нас
);addz: addsubR - Акумулатор за Z регистър
генерични сайта
(
размер => размер
)порт на сайта
(
dataa => zreg,
datab => ATAN,
резултат => newz,
както => както
);lut: anglelut
генерични сайта
(
размер => размер
)порт на сайта
(
Index => cnt,
ATAN => АТАН
);state_mach: fsmR
порт на сайта
(
clk => clk,
нулиране => нулиране,
на проекта => начало
cnt => cnt,
начална => перка,
nxt => nxt,
Съставено => Съставено
);shiftx: shiftR - преместване х стойност
генерични сайта
(
размер => размер
)порт на сайта
(
данни => xreg,
sdata => sxreg,
N => cnt
);находчив: shiftR - пренасочване Y стойност
генерични сайта
(
размер => размер
)порт на сайта
(
данни => yreg,
sdata => syreg,
N => cnt
);края арка;Търсене таблицаБиблиотеката IEEE;
използване IEEE.Std_Logic_1164.all;
използване IEEE.Std_Logic_arith.all;образувание anglelut еродови
(
размер: положителните: = 20
);
порт
(
индекс: в std_logic_vector (4 downto 0);
ATAN: изложени std_logic_vector (размер-1 downto 0)
);края anglelut;архитектурата таблица на anglelut Изразявасигнал tinfo: std_logic_vector (19 downto 0);започвамATAN <= tinfo;
процес (индекс)
започвамслучай индекс е
когато "00000" => tinfo <= X "3243F", - 45
когато "00001" => tinfo <= X "1DAC6"; - 26,565
когато "00010" => tinfo <= X "0FADB"; - 14,036
когато "00011" => tinfo <= X "07F56", - 7,125
когато "00100" => tinfo <= X "03FEA"; - 3,576
когато "00101" => tinfo <= X "01FFD"; - 1,789
когато "00110" => tinfo <= X "00FFF"; - 0,8951
когато "00111" => tinfo <= X "007FF"; - 0,4476
когато "01000" => tinfo <= X "003FF"; - 0,2238
когато "01001" => tinfo <= X "001FF"; - 0,1119
когато "01010" => tinfo <= X "000FF"; - 0,0559
когато "01011" => tinfo <= X "0007F"; - 0,0279
когато "01100" => tinfo <= X "0003F"; - 0,0139
когато "01101" => tinfo <= X "0001F"; - 0,00699
когато "01110" => tinfo <= X "0000F"; - 0,00349
когато "01111" => tinfo <= X "00007"; - 0,00174
когато "10000" => tinfo <= X "00003"; - 0,00087
когато "10001" => tinfo <= X "00001"; - 0,00043
когато "10010" => tinfo <= X "00000"; - 0,00021
когато "10011" => tinfo <= X "00000"; - 0,00010
когато другите => tinfo <= "--------------------";края случай;
края процес;
край масата;