Перейти к содержанию
    

Djony1987

Свой
  • Постов

    94
  • Зарегистрирован

  • Посещение

Весь контент Djony1987


  1. Сенк! Не подумал про это...наверно в 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 МГц, он как то странно свдигает с течением времени ПСП... Спасибо!
  2. Всмысле формировать ПСП последовательность в регистре сдвига? А если например укороченную ПСП надо, 100 вместо 128 - получается опять же надо счетчик до 100 как я понимаю. Не подскажите как она делается? Спасибо!
  3. Здравствуйте! Интересует пара вопросов. Есть поток 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 раз медленнее клока, есть еще варианты? Спасибо!
  4. Возможно из-за этого кстати было, папка была в Моих документах(
  5. Спасибо за статьи с IEEE! Очень помогаешь!!!

  6. ООО...СПАСИБО БОЛЬШОЕ!!! :) Никогда бы не подумал)))
  7. Я VHDL не знаю, но делается наверно через счетчик - 25 бит. Как переменная счетчика становится равной 25 млн. - состояние на выходе меняется на противоположное...вроде так.
  8. Спасибо! Поищу, а то вроде хотел сэкономить объем, а в итоге больше оказалось :)
  9. Я делал генератор синуса косинуса, вначале я задал полностью все значения синуса, косинуса в кейсе: В итоге на кристалле заняло: --------------------------------------- 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 не использовал как я понял, почему так? Спасибо!
  10. Я так сразу попробовал. Ошибку пишет, и в Active-HDL, и в Modelsim. Первое посмотрю. Второе не желательно - хотелось бы записать 1 раз в начале и все. А SV это что? SystemVerilog? я если честно не знаю. Спасибо за ссылку! Просинтезировал в Simlify. Вроде норм.
  11. Здравствуйте! Чтоб новую тему не создвать сюда вопрос задам. Как инициализировать массив 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 по крайней мере, как выше описано) Спасибо!
  12. Да...и антивирь и фаер отрубил, не помогает. Это при том что раньше устанавливалось при включенном антивирусе)
  13. Так много всего установлено и настроено, что потом придется долго возится, устанавливая и настраивая + диплом...если не получится за неделю, наверно придется переустановить винду:( 0, и в процессах ничего не появляется. Нет, с локального. Надо с сетевого попробовать))
  14. Обновил до самой последней версии, все также :(
  15. andrewkrot, Сенк за ответ! Комп вроде не слабый: AMD X2 5600+ 2.9 ГГц, 3 Гига ОЗУ. Каспер тоже не стоит, стоит НОД. Раньше просто устанавливался норм, что может переклинить так систему?!
  16. Здравствуйте! Уже долгое время не могу установить Xilinx ISE 11.1, дистрибутив уже несколько раз скачал с офф. сайта, не помогает. Проблема в том что при двойном щелчке на xsetup.exe нет никакой реакции. В чем может быть проблема? Раньше была установлена ISE 10.1, работал норм, но потом удалил. Плюс почистил реестр от старой версии (что нашел по поиску) Спасибо!
  17. Да, наверно на данном этапе уже не особо актуально, но сложность в том что обрабатывать синхронизацию для реальной системы (с переносом на несущую) довольно проблематично, все очень медленно... Сейчас схема разбита на блоки, отдельно кодирование, отдельно демодулятор с согласованным фильтром и т.д.
  18. Посмотри это: http://dl.dropbox.com/u/2907327/cordic1.JPG http://dl.dropbox.com/u/2907327/cordic2.JPG
  19. Спасибо за ответ! 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 Спасибо!
  20. 6-битные входные значения всмысле 2 по 3 бита, и тогда пройгрышь по сравнению с бесконечностью бит - 0.25 дБ. 16 не много? :) Насчет BRAM: 1) не очень понял взаимосвязь скорости декодирования и объемом памяти, как я понимаю объем необходимой памяти зависит от структуры декодера и размера метрик записываемых и т.д. 2) я в одном из постов дал ссылку на http://www.xilinx.com/itp/xilinx5/pdf/docs/xst/xst.pdf, пойдет ли для реализации декодера пример на стр. 165? Спасибо!
  21. Спасибо! 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]; Спаисбо!
  22. Скорее я больше напишу :) Прошу совета: 1) Выше я написал про вычисление метрики ребер при мягких решениях, нормален ли такой подход? 2) Как лучше делать нормализацию метрик путей? Я знаю 2 способа, это находить на кажом шаге самую малу метрику и вычитать из всех, имхо трудоемкий метод, и еще брать по модулю N, где N = 2dmax, dmax в этом случае это 14, т.е. N=28. взять например 32, но не очень понятен такой поход, ведь если окажется метрика меньше 32, её значение останется, а если больше то резко уменьшится? В чем суть? Можеть есть другой, более простой способ? Спасибо!
  23. Читал книжку месяц 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, предлагаю скооперироватся, так быстрее разберемся/сделаем :)
  24. Почему так много? Лучше наверно не получится, но лучшие нужны для больших скоростей мне кажется, при малых скоростях стандартный должен пойти. А корка генерится в код HDL или в файл, который уже заливать?
  25. Может я непонял, я думал на ниосе есть корка, которую можно промоделировать, посмотреть при некой частоте сколько каких блоков будет, или я ошибся? Пока что нахожусь на начальной стадии, сделал только кодер. У меня 64 состояния, т.е. 128 ребер (ветвей) - для которых надо запомнить или генерировать кодовые слова, чтобы потом вычилять евклидово расстояние между этими словами и пришедшими, в моем случе 2 значениями, т.к. скорость 1/2. Как обычно хранятся эти "кодовые слова" ребер? Спасибо!
×
×
  • Создать...