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

    

doc17

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

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

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

Контакты

  • Сайт
    http://
  • ICQ
    1434755

Информация

  • Город
    Москва
  1. Цитата(Maverick @ Dec 11 2013, 18:17) Ваше описание задает изменение длительности ШИМ (соотношение 1 и 0 в периоде) evgoi ведь того и хотел ? Цитата([b]evgoi[/b]' date='Dec 10 2013, 09:09) появилась необходимость добавить к уже имеющемуся коду настроечный вход типа "ПИЛЫ". Для 1 должна быть пила, а для 0 обратная пила. Или ... ?
  2. Цитата(evgoi @ Dec 10 2013, 10:55) Спасибо!...А как это сделать не подскажите? Примерно так, если я верно понял, что нужно: КодLIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY pwm_sawtooth IS      GENERIC(          sys_clk         : INTEGER := 50_000_000;          pwm_freq        : INTEGER := 100_000;          bits_resolution : INTEGER := 8;          phases          : INTEGER := 1      );              PORT(          clk       : IN  STD_LOGIC;          reset_n   : IN  STD_LOGIC;          ena       : IN  STD_LOGIC;          pwm_out   : OUT STD_LOGIC_VECTOR(phases-1 DOWNTO 0);          pwm_n_out : OUT STD_LOGIC_VECTOR(phases-1 DOWNTO 0);                   direction : IN  STD_LOGIC -- set sawtooth direction: 0 - rising, 1 - falling      ); END pwm_sawtooth; ARCHITECTURE logic OF pwm_sawtooth IS           -- Components used in the design      COMPONENT pwm          GENERIC(              sys_clk         : INTEGER := 50_000_000;              pwm_freq        : INTEGER := 100_000;              bits_resolution : INTEGER := 8;              phases          : INTEGER := 1          );          PORT(              clk       : IN  STD_LOGIC;              reset_n   : IN  STD_LOGIC;              ena       : IN  STD_LOGIC;              duty      : IN  STD_LOGIC_VECTOR(bits_resolution-1 DOWNTO 0);              pwm_out   : OUT STD_LOGIC_VECTOR(phases-1 DOWNTO 0);              pwm_n_out : OUT STD_LOGIC_VECTOR(phases-1 DOWNTO 0)          );      END COMPONENT;      -- Entity variables      SIGNAL duty: STD_LOGIC_VECTOR(bits_resolution-1 DOWNTO 0); BEGIN      -- PWM module connection      pwm_cmp: pwm GENERIC MAP(              sys_clk => sys_clk,              pwm_freq => pwm_freq,              bits_resolution => bits_resolution,              phases => phases          )          PORT MAP(              clk => clk,              reset_n => reset_n,              ena => ena,              duty => duty,              pwm_out => pwm_out,              pwm_n_out => pwm_n_out          );      -- Sawtooth counter      PROCESS(clk, reset_n)      BEGIN          IF(reset_n = '0') THEN              duty <= (OTHERS => '0');          ELSIF(rising_edge(clk)) THEN              IF(direction = '0') THEN duty <= duty + '1';              ELSE duty <= duty - '1';              END IF;          END IF;      END PROCESS; END logic; А вот тестбенч (на верилоге для простоты): Код// Testbench for PWM_SAWTOOTH module module pwm_sawtooth_tb;      reg clk, reset_n;           wire ena = 1'b1;           reg direction;           initial begin          clk = 1'b0;          reset_n = 1'b0;          direction = 1'b0;                   #1 reset_n = 1'b1;                            #1000 direction = 1'b1;      end      pwm_sawtooth DUT (                  .clk,                  .reset_n,                  .ena,                  //pwm_out   : OUT STD_LOGIC_VECTOR(phases-1 DOWNTO 0);                  //pwm_n_out : OUT STD_LOGIC_VECTOR(phases-1 DOWNTO 0);                  .direction          ); endmodule // pwm_sawtooth_tb
  3. Обращаться можно, но в данном случае Вам нужно использовать в пакете parameter PI = 3.14; вместо макроса. Макросы - это тупая автоподстановка текста (как "поиск-замена" в тектовом редакторе), она ортогональна иерархии типов и объектов языка. Макрос может быть объявлен где угодно (внутри или вне package/module/etc) и применён где угодно. Чтобы сработал макрос, нужно написать `include "<первый_файл.sv>" перед module, но в данном случае это явно не то, что Вы хотите.
  4. Код interface boobs_intf #(          parameter BoobSize = 6      )(          input logic CLK,          input logic RESETn      );      logic [BoobSize-1:0] LEFT_BOOBIE;      logic [BoobSize-1:0] RIGHT_BOOBIE;      modport woman (          input CLK, RESETn,          output LEFT_BOOBIE, RIGHT_BOOBIE      );      modport man (          input CLK, RESETn,          input LEFT_BOOBIE, RIGHT_BOOBIE      ); endinterface // boobs_intf module oh_pretty_woman #(          parameter BoobSize = 6      )(          boobs_intf.woman boobs      );           wire [BoobSize-1:0] pleasure = 100;           always_ff@(posedge boobs.CLK, negedge boobs.RESETn)          if(!boobs.RESETn) begin              boobs.LEFT_BOOBIE <= 'b0;              boobs.RIGHT_BOOBIE <= 'b0;                      end          else begin              boobs.LEFT_BOOBIE <= pleasure;              boobs.RIGHT_BOOBIE <= pleasure;          end endmodule // oh_pretty_woman module flower_garden #(          parameter CollegeSize = 128,          parameter BoobSize = 6      )(          boobs_intf.woman boobs[CollegeSize+3-1:0]      );           // Girls-next-door      oh_pretty_woman #(.BoobSize(BoobSize)) girl1(.boobs(boobs[0]));      oh_pretty_woman #(.BoobSize(BoobSize)) girl2(.boobs(boobs[1]));      oh_pretty_woman #(.BoobSize(BoobSize)) girl3(.boobs(boobs[2]));           // City college      generate          genvar i;          for(i = 0; i < CollegeSize; i++) begin              oh_pretty_woman #(.BoobSize(BoobSize)) student(.boobs(boobs[i+3]));          end      endgenerate endmodule // flower_garden module user #(          parameter GirlAmount = 128+3,          parameter BoobSize = 0      )(          boobs_intf.man boobs[GirlAmount-1:0]      );      reg [GirlAmount*BoobSize*2-1:0] fun;      generate          genvar i;          for(i = 0; i < GirlAmount; i++) begin              always_ff@(posedge boobs[i].CLK, negedge boobs[i].RESETn)                  if(!boobs[i].RESETn) begin                      fun[i*BoobSize*2 +: BoobSize*2] <= 'b0;                  end                  else begin                      fun[i*BoobSize*2 +: BoobSize] <= boobs[i].LEFT_BOOBIE;                      fun[(i*2+1)*BoobSize +: BoobSize] <= boobs[i].RIGHT_BOOBIE;                  end          end      endgenerate endmodule // user module night_party();           localparam CollegeSize = 128;      localparam GirlsNextDoor = 3;      localparam BoobSize = 6;           wire CLK, RESETn;      boobs_intf boobs[CollegeSize+GirlsNextDoor-1:0](.CLK(CLK), .RESETn(RESETn));               flower_garden #(.CollegeSize(CollegeSize), .BoobSize(BoobSize)) garden(.*);      user #(.GirlAmount(CollegeSize+GirlsNextDoor), .BoobSize(BoobSize)) usr(.*); endmodule // night_party
  5. Цитата(Doka @ Jun 14 2007, 15:52) так-то оно так, да только надо учитывать, что в RAW-формате данные хранятся в виде представления на Байеровской матрице G-B-R-G ( а не привычном RGB ) А разве RAW формат жёстко стандартизован ? Подобную задачу я решал именно так, как описал Builder. Файлы обрабатывались IrfanView - он понимает RAW с любым порядком и разрядностью цвета (параметры задаются вручную). Любая картинка -> приводим размер к нужному в Irfanview -> сохраняем в RAW (RGB 8 bit) -> модуль на Verilog читает файл и выдаёт картинку тестируемому -> выход пишется другим модулем в RAW -> открываем RAW в Irfanview и смотрим. Для пущей радости можно всё это делать скриптом (в мейкфайле например) - у Irfanview операции доступны через командную строку. Под юниксами подойдёт ImageMagick или XnView.
  6. У Вас случсайно вместе два Quartus'a не стоят? Когда 5.1 и 6.0 вместе были установлены, то вообще некоторые узлы из проекта в симулятор не добалялись- писал критическая ошибка и выбрасывал из программы. Стер старый квартус- и все в порядке!
  7. У нас был случай (правда на устаревшем ныне APEX20KE) что проект нормально работал на 120-150МГц без использования SignalTap, а при его добавлении частота в 100МГц уже давала непонятные результаты (даже помехами это сложно было назвать). Собственно это вполне логично объясняется тем, что под SignalTap необходимо выделять ресурсы ПЛИС. И увеличивая количество сигналов и глубину просмотра, увеличиваем требуемое количество ресурсов.
  8. Если неохота вставлять виртуальные пины, то можно сразу посмотреть содержимое нужного регистра: В симуляторе стандартно Insert Node or Bus-> Node Finder-> выбрать " Registers Pre-synthesis" и указать название регистра как в блоке проекта (лучше имя указывать как "*name*" т.к. в начале добавляются имя проекта и блока )
  9. Насколько я понял сейчас отладка идет на функцианальном или временном уровне. После этого можно посмотреть как все это будет работать на реальном железе (естественно при его наличии). Для этого своетую испоьзовать SignalTap (Tools-> SignalTap Logic Analizer) В Signal Configuration выбираете clock, по которому будет просмотр и запись сигналов, глубину просмотра (Sample Depth), а в окне SETUP добавляете сигналы, которые требуется посмотреть, а также выставляете условие, по которому производить начало записи (напр. по положительному фронту какого-ниб сигнала), нажимаете Run и готово!
  10. Цитата(Vinnetu @ Sep 6 2006, 14:37) А ещё вопрос. Как в симуляторе посмотреть интересующие сигналы? Я цепляю к сигналу Output Port, а потом нахожу его в симуляторе. Но ведь как-то иначе должно быть. Можно посмотреть нужный сигнал и через Output Port, но лучше его объявить виртуальным: выбираете пин, правая клавиша мыши-> locate->locate in assignment editor-> в поле "Assignment name" выбрать "Virtual Pin" , затем в поле Value выбрать "On" и сохраниться (Ctrl+S) Это позволит вставить куда нужно виртуальные пины, не загромождая настоящими контактами проект, а также смотреть реальный сигнал в данный момент времени (без учета задержек, связанных с прохождением сигнала из ячейки до настоящего пина через матрицу соединений)
  11. Цитата(oval @ Aug 14 2006, 12:45) Компания Celoxica занимается средствами синтеза такого рода. Опыта использования к сожалению пока нет. Нет ли кого-нибудь кто уже работал с Celoxica? А то столько пишут про нее, а реальных отзывов не видно. Может вообще нет смысла этим направлением заниматься?
  12. Чего-то не могу себе представить, что FIFO , будет работать с двумя абсолютно разными clock'ами используя только логические ячейки. На мой взгляд, если работаешь с разными клоками, то единственный шанс сделать для них FIFO- это использовать двухпортовую память, а не пытаться завести два клока на один регистр.
  13. А какой версией Quartus'a ты пользуешься? Может просто глючная версия? Не знаю как с ACEX, но с APEX'ами Quartus II 6.0 нормально работает, хотя они тоже порядком устарели. Я также заметил, что если стоят две версии Q, то их очень глючит (причем как правило более новую версию) А MaxPlusII морально себя изжил еще пару лет назад.
  14. Цитата(Pyhesty @ Jul 28 2006, 13:31) Убил и переустановил квартус, удалил все папки из проекта - не помогает :-( Установлены, все тайминги и настройки, которые я понимаю. входной и выходной клоки выстраиваются в линию. А шестой квартут достать нет возмонжости. Кстати, по производительности он лучше или нет пятого? Quartus II 6.0 можно скачать с сайта альтеры, причем полную версию. Не знаю как 5.0, но 5.1 меня достал основательно- глючил нереально, что я с ним только не делал... А с шестой версией все нормально работает, даже без SP1