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

cyclop

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о cyclop

  • Звание
    Участник
    Участник

Контакты

  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

1 107 просмотров профиля
  1. Код Грея очень помогает в случае, подобном вашему. Здесь про АЦП. Проверку с использованием ПСП (М - последовательности) реализовать не так уж сложно, т.к. число тактов будет известно. Кстати, нельзя исключать и не слишком удачную разводку. Успехов.
  2. В обычном V помог бы счетчик с инкрементом на каждом такте, по счетчику - case c default, в default - обнуление сигналов, в остальных позициях case - установка нужных.
  3. Как было уже отмечено - для каждого семейства - своя библиотека. Например, для Spartan-6 HDL lib здесь.
  4. В плате, которая перепала мне по наследству, схема реагировала на подключение программатора именно по заземлению им (программатором) 1-ой ножки на плате, т.е. JTAG цепочка там была не простой, были и другие источники загрузки помимо программатора.
  5. 2 0x08 Посмотрите на 1 ножку разъёма программатора на плате. В программаторах LPT она заземлялась, тогда как в программаторах USB - оставлена свободной.
  6. Максимальную частоту проекта можно задавать в свойствах PAR. Там же, емнип, и стратегию разводки: standard, middle, high; существуют и более тонкие настройки в этой части. PAR Report расскажет о результатах: в конце текстового файла будут приведены все клоки проекта с мин. получившимися периодами и их соответствие заданной максимальной частоте проекта, последняя по умолчанию принимается равной 1МГц (в Synplify точно так - 1МГц).
  7. Используя ChipScope Inserter, не раз сталкивался с похожими затыками. Было даже, что генерация файла прошивки стопорила (MAP и PAR пройдены) и такое рассказывала мне про глобальные клоки проекта ... Помогало добавление триггерных портов (trigger ports) ChipScope'а и перегруппировка исследуемых сигналов по этим портам.
  8. Первый вариант.Вот такой модуль. module r_shft_regfile(clk, enable, dataIn, result); parameter W=4, N=8; input clk, enable; input [W-1:0] dataIn; output [(W*N)-1:0] result; reg [W-1:0] regBank [N-1:0]; integer i; always @(posedge clk) begin if (enable == 1) begin for (i=N-1; i>0; i=i-1) begin regBank[i-1] <= regBank[i]; end regBank[N-1] <= dataIn; end end generate begin:G1 genvar k; for(k=0; k<N; k=k+1) begin assign result[(k*W+(W-1)):k*W] = regBank[k]; end end endgenerate endmodule Где ширина, где глубина надеюсь понятно. Второй вариант, который вам понравится больше. Нужно написать модуль для регистра сдвига, в вашем случае 2073-разрядный. Дальше вставляете его 16 раз (Verilog позволяет это сделать в одну строку) и вуаля! shftreg the_shftregs [15:0](in_bit,enb,clk, o_bit); in_bit и o_bit для самого shftreg 1-разрядные, а для the_shftregs - 16-разрядные, т.е. прямо вход и выход для вашей задачи.
  9. В новых версиях Notepad++ для работы функции автозавершения вместо файла verilog.api нужно будет использовать verilog.xml, который почему-то не подкладывают в отличие от VHDL-кого. Пришлось перебивать. verilog.xml
  10. Конструкция такая есть, но под условием должен стоять параметр, а имя ей - "generate". Вот цитата из стандарта. 12.1.3.3 generate-conditional A generate-conditional is an if-else-if generate construct that permits modules, user defined primitives, Verilog gate primitives, continuous assignments, initial blocks and always blocks to be conditionally instantiated into another module based on an expression that is deterministic at the time the design is elaborated. module multiplier(a,b,product); parameter a_width = 8, b_width = 8; localparam product_width = a_width+b_width; // can not be modified // directly with the defparam statement // or the module instance statement # input [a_width-1:0] a; input [b_width-1:0] b; output [product_width-1:0] product; generate if((a_width < 8) || (b_width < 8)) CLA_multiplier #(a_width,b_width) u1(a, b, product); // instance a CLA multiplier else WALLACE_multiplier #(a_width,b_width) u1(a, b, product); // instance a Wallace-tree multiplier endgenerate // The generated instance name is u1 endmodule То же и с оператором case. generate case (WIDTH) 1: adder_1bit x1(co, sum, a, b, ci); // 1-bit adder implementation 2: adder_2bit x1(co, sum, a, b, ci); // 2-bit adder implementation default: adder_cla #(WIDTH) x1(co, sum, a, b, ci); // others - carry look-ahead adder endcase // The generated instance name is x1 endgenerate Вместо модулей, приведённых в примерах, можете вставлять assing, always, a также reg, wire и пр., помещая это в операторные скобки begin-end.
  11. Уж не знаю какой вы там стандарт смотрите, вот в IEEE Std 1364-2001 Verilog HDD раздел 4.1.14 написано всё првильно, да и всю жизнь так было: конкатенация - 1 пара скобок {}, репликация - 2 пары {{}}. Запомнить очень легко.
  12. Для notepad++ создал verilog.api. Ключевые слова - из стандарта Verilog 2001. Ну а вот директивы компилятора и системные задачи и функции в этом файле жить не захотели - не всегда открывалось окно списка. А получается нездорово без шаблонов-то: ни свою, ни языковую, ни библиотечную конструкцию не вставить, только вручную. Ну и до кучи. Не нашлось создания шапки (title). Вставка времени и имени файла есть, но по отдельности, а макрос эти вставки не взял, что-то ему мешается. А выделение функциональных блоков смотрится хорошо, глаз так и цепляет. Конечно, это всегда так было, что читать приятнее чем писать, и notepad++ это лишний раз подтверждает. verilog_api.rar
  13. Интересно, а кто-нибудь с template в notepad++ разобрался? А то без них он как бы и не очень нужен работающим в HDL.
  14. Инженер-конструктор? На предприятии бывшего МРП такого конструктора и представить невозможно. Ну да ладно. А вот скажите, на Водном Стадионе ваш филиал работает?
  15. Верно. А ещё можно воспользоваться синтезатором типа Synplify, который рисует две схемы (RTL и вентильного уровня); там сразу будет видно, что синтезировалось. И в log-файле он даёт потребление ресурсов.
×
×
  • Создать...