-
Постов
94 -
Зарегистрирован
-
Посещение
Весь контент Djony1987
-
Расширение спектра
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
Сенк! Не подумал про это...наверно в ROM буду пихать все таки. Ясно. Спасибо! Насчет клока понял, выходная скорость привязана к нему. Не получается у меня заставить работать эту прошивку...посмотрите плис module spread_spectrum(Clock, Reset, Data, Spread_sp); input Clock, Reset; input Data; output Spread_sp; reg Spread_sp; reg [99:0] pn_seq; reg [6:0] count; always @(posedge Clock) begin if(Reset) begin Spread_sp <= 1'b0; //pn_seq <= 100'b000001111111010101001100111011101001011000110111101101011011001001000111000 0101111100101011100110100; pn_seq <= 100'b111111111111111111111111111111111111111111111111110000000000000000000000000 0000000000000000000000000; count <= 7'd0; end else begin if(count == 7'd100) count <= 7'd0; else count <= count + 7'd1; Spread_sp <= Data ^ pn_seq[count]; end end endmodule Делаю частоту Clock - 100 МГц, а частоту Data - 1 МГц, он как то странно свдигает с течением времени ПСП... Спасибо! -
Расширение спектра
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
Всмысле формировать ПСП последовательность в регистре сдвига? А если например укороченную ПСП надо, 100 вместо 128 - получается опять же надо счетчик до 100 как я понимаю. Не подскажите как она делается? Спасибо! -
Расширение спектра
Djony1987 опубликовал тема в Языки проектирования на ПЛИС (FPGA)
Здравствуйте! Интересует пара вопросов. Есть поток 16 кбит/с, после кодера будет 35.1 кбит/с например, обяъсните плис как эти скорости будут связаны с клоком? Клок должен быть кратный этим скоростям или если будет 25 МГц то норм? Я хочу сделать расширение спектра, насвкидку написал код, правильно ли это: module spread_spectrum(Clock, Reset, Data, Spread_sp); input Clock, Reset; input Data; output Spread_sp; reg Spread_sp; reg [7:0] pn_seq; reg [2:0] count; always @(posedge Clock) begin if(Reset) begin Spread_sp <= 1'b0; pn_seq <= 8'b0011101; count <= 3'd0; end else begin count <= count + 3'd1; Spread_sp <= Data ^ pn_seq[count]; end end endmodule Мне надо чтобы на 1 бит на выход шло 8 чипов, в этой реализации надо чтобы частота инф. потока была в 8 раз медленнее клока, есть еще варианты? Спасибо! -
Возможно из-за этого кстати было, папка была в Моих документах(
-
ООО...СПАСИБО БОЛЬШОЕ!!! :) Никогда бы не подумал)))
-
Делитель частоты
Djony1987 ответил lipbox тема в Языки проектирования на ПЛИС (FPGA)
Я VHDL не знаю, но делается наверно через счетчик - 25 бит. Как переменная счетчика становится равной 25 млн. - состояние на выходе меняется на противоположное...вроде так. -
$readmemh в Верилоге
Djony1987 ответил sherr тема в Языки проектирования на ПЛИС (FPGA)
Спасибо! Поищу, а то вроде хотел сэкономить объем, а в итоге больше оказалось :) -
$readmemh в Верилоге
Djony1987 ответил sherr тема в Языки проектирования на ПЛИС (FPGA)
Я делал генератор синуса косинуса, вначале я задал полностью все значения синуса, косинуса в кейсе: В итоге на кристалле заняло: --------------------------------------- Resource Usage Report for sin_cos3 Mapping to part: xc6vlx75tlff484-1l Cell usage: FD 22 uses GND 1 use MUXCY_L 21 uses RAMB18E1 1 use VCC 1 use XORCY 21 uses LUT1 22 uses I/O ports: 9 I/O primitives: 9 IBUFG 1 use OBUF 8 uses BUFG 1 use I/O Register bits: 0 Register bits not including I/Os: 22 (0%) RAM/ROM usage summary Block Rams : 1 of 156 (0%) Global Clock Buffers: 1 of 32 (3%) Number of unique control sets: 1 C(Clk1x_c), CLR(GND), PRE(GND), CE(VCC) : 22 Total load per clock: sin_cos3|Clk1x: 23 Mapping Summary: Total LUTs: 22 (0%) Mapper successful! Process took 0h:00m:01s realtime, 0h:00m:01s cputime Потом я записал только 1/4 периода (через $readmemb), а остальное получал через них: --------------------------------------- Resource Usage Report for sin_cos5 Mapping to part: xc6slx16csg225-2 Cell usage: FD 30 uses GND 1 use MUXCY_L 21 uses VCC 1 use XORCY 21 uses LUT1 22 uses LUT2 1 use LUT6 6 uses I/O ports: 9 I/O primitives: 9 IBUFG 1 use OBUF 8 uses BUFG 1 use I/O Register bits: 0 Register bits not including I/Os: 30 (0%) Global Clock Buffers: 1 of 16 (6%) Number of unique control sets: 1 C(Clk1x_c), CLR(GND), PRE(GND), CE(VCC) : 30 Total load per clock: sin_cos5|Clk1x: 30 Mapping Summary: Total LUTs: 29 (0%) Mapper successful! Process took 0h:00m:01s realtime, 0h:00m:01s cputime Во втором случа он вообще BRAM не использовал как я понял, почему так? Спасибо! -
$readmemh в Верилоге
Djony1987 ответил sherr тема в Языки проектирования на ПЛИС (FPGA)
Я так сразу попробовал. Ошибку пишет, и в Active-HDL, и в Modelsim. Первое посмотрю. Второе не желательно - хотелось бы записать 1 раз в начале и все. А SV это что? SystemVerilog? я если честно не знаю. Спасибо за ссылку! Просинтезировал в Simlify. Вроде норм. -
$readmemh в Верилоге
Djony1987 ответил sherr тема в Языки проектирования на ПЛИС (FPGA)
Здравствуйте! Чтоб новую тему не создвать сюда вопрос задам. Как инициализировать массив reg [3:0] sin [0:15]; Если для симуляции можно: initial begin sin[0] = 4'b0000; sin[1] = 4'b0001; sin[2] = 4'b0010; ... sin[15] = 4'b0111; end А для синтеза? Сколько вариантов есть и какие? (я так понимаю можно через $readmemb, в Simlify по крайней мере, как выше описано) Спасибо! -
Да...и антивирь и фаер отрубил, не помогает. Это при том что раньше устанавливалось при включенном антивирусе)
-
Так много всего установлено и настроено, что потом придется долго возится, устанавливая и настраивая + диплом...если не получится за неделю, наверно придется переустановить винду:( 0, и в процессах ничего не появляется. Нет, с локального. Надо с сетевого попробовать))
-
Обновил до самой последней версии, все также :(
-
andrewkrot, Сенк за ответ! Комп вроде не слабый: AMD X2 5600+ 2.9 ГГц, 3 Гига ОЗУ. Каспер тоже не стоит, стоит НОД. Раньше просто устанавливался норм, что может переклинить так систему?!
-
Не устанавливается Xilinx ISE
Djony1987 опубликовал тема в Среды разработки - обсуждаем САПРы
Здравствуйте! Уже долгое время не могу установить Xilinx ISE 11.1, дистрибутив уже несколько раз скачал с офф. сайта, не помогает. Проблема в том что при двойном щелчке на xsetup.exe нет никакой реакции. В чем может быть проблема? Раньше была установлена ISE 10.1, работал норм, но потом удалил. Плюс почистил реестр от старой версии (что нашел по поиску) Спасибо! -
Да, наверно на данном этапе уже не особо актуально, но сложность в том что обрабатывать синхронизацию для реальной системы (с переносом на несущую) довольно проблематично, все очень медленно... Сейчас схема разбита на блоки, отдельно кодирование, отдельно демодулятор с согласованным фильтром и т.д.
-
Посмотри это: http://dl.dropbox.com/u/2907327/cordic1.JPG http://dl.dropbox.com/u/2907327/cordic2.JPG
-
Декодер Витерби
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
Спасибо за ответ! 16 бит как я понял надо брать, т.к. в BRAM можно записывать или по 8, или по 16 и т.д., т.е. кратно 2. (при этом 8 мало, остается 16). У меня 2 ACS - т.е. обрабатывается 1 бабочка. Т.е. уже надо 32 итерации на 1 пролет решетки. Если 2 ACS мне надо считывать из памяти 4 метрики пути, и после ACSов записывать две. Для хранения метрик = (16(бит на метрику)*64(состояния))*2 = 2048 бит - для хранения текущей и следующей метрик. Для хранения выживших нам надо - 64(состояния)*45(глубина) = 2889 бит - запоминается только LSB состояния. Тогда блок памяти для метрик: module RAM (clk, we, a, di, do); input clk; input we; input [6:0] a; input [15:0] di; output [15:0] do; reg [15:0] ram [127:0]; reg [6:0] read_a; always @(posedge clk) begin if (we) ram[a] <= di; read_a <= a; end assign do = ram[read_a]; endmodule А если использовать двухпортовую память скорость увеличится? Блок ACS: module ACS(CompareEnable, Distance0, Distance1, PathMetric0, PathMetric1, Metric, Survivor); input CompareEnable; input [3:0] Distance0, Distance1; input [15:0] PathMetric0, PathMetric1; output [15:0] Metric; output Survivor; wire [15:0] ADD0, ADD1; wire Survivir; wire [15:0] Temp_Metric, Metric; assign ADD0 = Distance0 + PathMetric0; assign ADD1 = Distance1 + PathMetric1; Comparator Comp(CompareEnable, ADD0, ADD1, Survivor); assign Temp_Metric = (Survivor) ? ADD1 : ADD0; assign Metric = (CompareEnable) ? Temp_Metric : ADD0; endmodule module Comparator(CompareEnable, Metric0, Metric1, Survivor); input CompareEnable; input [15:0] Metric0, Metric1; output Survivor; wire Surv; assign Surv = (Metric0 <= Metric1) ? 1'b0 : 1'b1; assign Survivor = (CompareEnable) ? Surv : 1'b0; endmodule Спасибо! -
Декодер Витерби
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
6-битные входные значения всмысле 2 по 3 бита, и тогда пройгрышь по сравнению с бесконечностью бит - 0.25 дБ. 16 не много? :) Насчет BRAM: 1) не очень понял взаимосвязь скорости декодирования и объемом памяти, как я понимаю объем необходимой памяти зависит от структуры декодера и размера метрик записываемых и т.д. 2) я в одном из постов дал ссылку на http://www.xilinx.com/itp/xilinx5/pdf/docs/xst/xst.pdf, пойдет ли для реализации декодера пример на стр. 165? Спасибо! -
Декодер Витерби
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
Спасибо! 1. Это сделал. Т.к. максимум 14 (7+7), то на дистанцию 4 бита (16). На вход подается 2 значения по 3 бита. module Soft_dist_calc(InputBits, EncOut, OutputDistance); input [5:0] InputBits; input [1:0] EncOut; output [3:0] OutputDistance; reg [3:0] OutputDistance; always @(EncOut) begin case(EncOut) 2'b00: OutputDistance = InputBits[5:3] + InputBits[2:0]; 2'b01: OutputDistance = InputBits[5:3] + (7 - InputBits[2:0]); 2'b10: OutputDistance = (7 - InputBits[5:3]) + InputBits[2:0]; 2'b11: OutputDistance = (7 - InputBits[5:3]) + (7 - InputBits[2:0]); endcase end endmodule 2. У меня K=7, глубина 40 например, т.е. масимум может быть занчяения метрики пути в конце 40*14 = 520, лучше 10 бит взять на метрики? (можно глубину увеличить например в последующем) 3. Как лучше хранить метрики? В RAM или в регистровой памяти, как массив например reg [9:0] RAM [40(глубина)*64(состояний) - 1:0]; Спаисбо! -
Декодер Витерби
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
Скорее я больше напишу :) Прошу совета: 1) Выше я написал про вычисление метрики ребер при мягких решениях, нормален ли такой подход? 2) Как лучше делать нормализацию метрик путей? Я знаю 2 способа, это находить на кажом шаге самую малу метрику и вычитать из всех, имхо трудоемкий метод, и еще брать по модулю N, где N = 2dmax, dmax в этом случае это 14, т.е. N=28. взять например 32, но не очень понятен такой поход, ведь если окажется метрика меньше 32, её значение останется, а если больше то резко уменьшится? В чем суть? Можеть есть другой, более простой способ? Спасибо! -
Декодер Витерби
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
Читал книжку месяц 2 месяца назад. Широту проблемы я представляю, но в инете много алгоритмов на С, есть на Verilog и VHDL. Т.е. есть на что смотреть, хотелось бы кончено самому все написать. Не много будет 8 бит на значение? Дж. Кларк, Дж. Кейн Кодированием с исправлением ошибок в системах цифровой связи, здесь предлагается делать так: Модуль соответсвенно: module distance_calc(A_in_1, A_in_0, s0, s1, s2, s3); input [2:0] A_in_1, A_in_0; output [3:0] s0, s1, s2, s3; always @(A_in_1 or A_in_0) begin s0 <= A_in_1 + A_in_0; s1 <= A_in_1 + (7 - A_in_0); s2 <= (7 - A_in_1) + A_in_0; s3 <= (7 - A_in_1) + (7 - A_in_0); end endmodule Примерно написал: module ACS(path_metric_0, path_metric_1, branch_metric_0, branch_metric_1); input [4:0] path_metric_0, path_metric_1; input [3:0] branch_metric_0, branch_metric_1; output [4:0] min_path; reg [4:0] sum_1, sum_0; assign sum_1 = path_metric_1 + branch_metric_1; assign sum_0 = path_metric_0 + branch_metric_0; function [4:0] find_min_metric; input [4:0] a, b; begin if(a <= b) find_min_metric = a; else find_min_metric = b; end endfunction assign min_path = find_min_metric(sum_0, sum_1); endmodule Если сделать как выше? Коммутатор всмысле мультиплексор? Какая его роль в работе объясните пожалуйста... С блочной памятью еще не работал, нашел в этом документе несколько примеров: http://www.xilinx.com/itp/xilinx5/pdf/docs/xst/xst.pdf Какой выбрать? Если Вы не против еще поспрашиваю по нему... ЗЫ Может кто-то тоже хочет разобратся в декодере Витреби и написать на verilog, предлагаю скооперироватся, так быстрее разберемся/сделаем :) -
Декодер Витерби
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
Почему так много? Лучше наверно не получится, но лучшие нужны для больших скоростей мне кажется, при малых скоростях стандартный должен пойти. А корка генерится в код HDL или в файл, который уже заливать? -
Декодер Витерби
Djony1987 ответил Djony1987 тема в Языки проектирования на ПЛИС (FPGA)
Может я непонял, я думал на ниосе есть корка, которую можно промоделировать, посмотреть при некой частоте сколько каких блоков будет, или я ошибся? Пока что нахожусь на начальной стадии, сделал только кодер. У меня 64 состояния, т.е. 128 ребер (ветвей) - для которых надо запомнить или генерировать кодовые слова, чтобы потом вычилять евклидово расстояние между этими словами и пришедшими, в моем случе 2 значениями, т.к. скорость 1/2. Как обычно хранятся эти "кодовые слова" ребер? Спасибо!