Meinframe 0 14 ноября, 2011 Опубликовано 14 ноября, 2011 · Жалоба always_ff @(posedge iclk) if (irst | cycle) err_ctr <= 8'h0; else if (ien & erEvent) err_ctr <= err_ctr + 1; Error (10170): Verilog HDL syntax error at channel.v(25) near text "@"; expecting ".", or an identifier, or "(", or "" <-----что сие за бред? я целый день просидел так и не смог исправить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosu-art 0 14 ноября, 2011 Опубликовано 14 ноября, 2011 · Жалоба Может так: always_ff @(posedge iclk) begin if (irst | cycle) err_ctr <= 8'h0; else if (ien & erEvent) err_ctr <= err_ctr + 1; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 14 ноября, 2011 Опубликовано 14 ноября, 2011 · Жалоба Может так: always_ff @(posedge iclk) begin if (irst | cycle) err_ctr <= 8'h0; else if (ien & erEvent) err_ctr <= err_ctr + 1; end Та же ошибка Error (10170): Verilog HDL syntax error at channel.v(25) near text "@"; expecting ".", or an identifier, or "(", or "" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 14 ноября, 2011 Опубликовано 14 ноября, 2011 · Жалоба Нужен весь файл. Возможно у вас ошибка где-то выше этого фрагмента. А у вас вообще в проекте есть сигнал erEvent? Нельзя настолько бездумно пытаться решить поставленную перед вами задачу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 14 ноября, 2011 Опубликовано 14 ноября, 2011 · Жалоба Нужен весь файл. Возможно у вас ошибка где-то выше этого фрагмента. Сам код к этой ошибке никакого отношения не имеет. Нечего Квартус обманывать, он тогда и ругаться не будет. Файл имеет расширение .v это значит, что если в настройках не поставлено соответствующей галочки (а в данном случае она точно не поставлена), то Квартус компилирует это как Verilog, а не SystemVerilog. В Verilog, как известно, нет always_ff - вот Квартус и выдает ошибку. Вы либо дайте файлу правильное расширение (.sv), либо в Assigments -> Settings -> Analysis & Synthesis Settings -> Verilog HDL Input поставьте галочку на SV (сейчас у Вас стоит против Verilog-2001 или Verilog-1995) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 14 ноября, 2011 Опубликовано 14 ноября, 2011 · Жалоба Сам код к этой ошибке никакого отношения не имеет. Нечего Квартус обманывать, он тогда и ругаться не будет. Точняк. Надо просто понимать, как появился этот проект. Накидал этот проект в другой теме, и там ff не было. А строки выше писал по памяти студенту с телефона на мыло. ТС так их и вставил не поправив ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 14 ноября, 2011 Опубликовано 14 ноября, 2011 · Жалоба module channel ( input irst, iclk, ien, input [7:0] ierRate, // Входная вероятность ошибки // 8'h00 - P = 0 - ошибки отсутствуют // 8'hFF - P = ~0.5 input iserial, // Входные данные (код NRZ) output oserial // Выходные данные ); // Регистр генератора ПСП, инициализируется // всеми единицами при включении ПЛИС reg [8:0] lfsr = {9{1'b1}}; // Выходной буферный регистр reg serial_ff; //Счётчик reg [7:0] err_ctr; //Результат ошибок reg result; // Событие "ошибка" случается, если значение в регистре ПСП // менее заданного параметра wire errorEvent = lfsr < {1'b0, ierRate}; wire cycle; //Счетчик будет считать каждый раз, когда наш генератор генерирует ошибку always @ (posedge iclk) if (irst | cycle) err_ctr <= 8'h0; else if (ien & errorEvent) err_ctr <= err_ctr + 1; //Посчитанный результат сохраняем в регистр до конца цикла измерения always @ (posedge iclk) if (irst) result <= 8'h0; else if (ien & cycle) result <= err_ctr; // Описание сдвигового регистра с обратными связями (генератора ПСП) always @ (posedge iclk) if (irst) lfsr <= {9{1'b1}}; // По сигналу сброс синхронно (т.е. по фронту iclk) // загружаем в регистр все единицы else if (ien) // По сигналу lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]}; // Стандартный полином для генератора 9-й степени // g(x) = x^9 + x^5 + 1 //Регистр один раз за цикл пробегает любое выбранное нами значение. //Формируем сигнал конца цикла assign cycle = lfsr == 9'hFF; // По переднему фронту сигнала iclk при активном разрешительном сигнале ien // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ // между исходным (входным) потоком данных и потоком ошибок. always @ (posedge iclk) if (ien) serial_ff <= iserial ^ errorEvent; assign oserial = serial_ff; endmodule а как посмотреть result ? ну или кол-во ошибок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба Имеется код. module channel ( input irst, iclk, ien, input [7:0] ierRate, // Входная вероятность ошибки // 8'h00 - P = 0 - ошибки отсутствуют // 8'hFF - P = ~0.5 input iserial, // Входные данные (код NRZ) output oserial // Выходные данные ); // Регистр генератора ПСП, инициализируется // всеми единицами при включении ПЛИС reg [8:0] lfsr = {9{1'b1}}; // Выходной буферный регистр reg serial_ff; // Событие "ошибка" случается, если значение в регистре ПСП // менее заданного параметра wire errorEvent = lfsr < {1'b0, ierRate}; // Описание сдвигового регистра с обратными связями (генератора ПСП) always @ (posedge iclk) if (irst) lfsr <= {9{1'b1}}; // По сигналу сброс синхронно (т.е. по фронту iclk) // загружаем в регистр все единицы else if (ien) // По сигналу lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]}; // Стандартный полином для генератора 9-й степени // g(x) = x^9 + x^5 + 1 // По переднему фронту сигнала iclk при активном разрешительном сигнале ien // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ // между исходным (входным) потоком данных и потоком ошибок. always @ (posedge iclk) if (ien) serial_ff <= iserial ^ errorEvent; assign oserial = serial_ff; endmodule Имеется дополнениек этому коду: //ошибки за период счетчика LFSR. //Регистр один раз за цикл пробегает любое выбранное нами значение. //Формируем сигнал конца цикла assign cycle = lfsr == 9'hFF; //Cчетчик будет считать каждый раз, когда наш генератор генерирует ошибку always_ff @ (posedge iclk) if (irst | cycle) err_ctr <= 8'h0; else if (ien & errorEvent) err_ctr <= err_ctr + 1; //Посчитанный результат сохраняем в регистр до конца цикла измерения always_ff @ (posedge iclk) if (irst) result <= 8'h0; else if (ien & cycle) result <= err_ctr; Эти строки нужно просто вставить в проект в любом месте, определив, конечно, используемые регистры. Я вставлял эти строки, объявлял регистры. Но когда делал функциональную симуляцию, то ничего не получалось. Кто нибудь может вставить эти строки в код правильно и провести функциональную симуляцию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба Кто нибудь может вставить эти строки в код правильно и провести функциональную симуляцию? Тут много кто может вставить эти строки в код правильно и провести функциональную симуляцию - это вполне решаемая задача. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба Тут много кто может вставить эти строки в код правильно и провести функциональную симуляцию - это вполне решаемая задача. А почему же никто не поможет? Ведь это дело 10 минут(возможно даже меньше) Просто я люблю учится на примерах готовых, а не на воздухе в котором ветает то что мне нужно и которое я смогу поймать только через 1-2 месяца... Ну помогите же мне :rolleyes:. А то тут сообщество принципиальных людей, которые привыкли жить как [волки в "стаде"]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба А почему же никто не поможет? Ведь это дело 10 минут(возможно даже меньше) Потому что то, что Вы просите это не помощь, а просто выполнение вашего учебного задания за Вас. Проект Вам написали, может кто и моделирование за Вас выполнит... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба Всё, хорош флудить. Сам сделаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Ага ! Не ждали :1111493779: Просидел 2 дня толку 0. Вот что нагородил: module channel ( input irst, iclk, ien, input [7:0] ierRate, // Входная вероятность ошибки // 8'h00 - P = 0 - ошибки отсутствуют // 8'hFF - P = ~0.5 input iserial, // Входные данные (код NRZ) output oserial, oerserial // Выходные данные ); // Регистр генератора ПСП, инициализируется // всеми единицами при включении ПЛИС reg [8:0] lfsr = {9{1'b1}}; // Выходной буферный регистр reg serial_ff; // Событие "ошибка" случается, если значение в регистре ПСП // менее заданного параметра wire errorEvent = lfsr < {1'b0, ierRate}; //Ошибки reg [8:0] result; //Счётчик reg [8:0] err_ctr; reg [8:0] cycle; //Регистр один раз за цикл пробегает любое выбранное нами значение. //Формируем сигнал конца цикла assign cycle = lfsr == 9'hFF; //Счетчик будет считать каждый раз, когда наш генератор генерирует ошибку always_ff @ (posedge iclk) if (irst | cycle) err_ctr <= 8'h0; else if (ien & errorEvent) err_ctr <= err_ctr + 1; //Посчитанный результат сохраняем в регистр до конца цикла измерения always_ff @ (posedge iclk) if (irst) result <= 8'h0; else if (ien & cycle) result <= err_ctr; assign oerserial = result; // Описание сдвигового регистра с обратными связями (генератора ПСП) always @ (posedge iclk) if (irst) lfsr <= {9{1'b1}}; // По сигналу сброс синхронно (т.е. по фронту iclk) // загружаем в регистр все единицы else if (ien) // По сигналу lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]}; // Стандартный полином для генератора 9-й степени // g(x) = x^9 + x^5 + 1 // По переднему фронту сигнала iclk при активном разрешительном сигнале ien // присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ // между исходным (входным) потоком данных и потоком ошибок. always @ (posedge iclk) if (ien) serial_ff <= iserial ^ errorEvent; assign oserial = serial_ff; endmodule И всё равно почему-то при функциональной симуляции на oerserial ничего нет...прям ваще незнаю что делать :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Putnik 0 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба ну симуляцию научились уже делать, уже не ноль значит используйти инкрементную отладку, смотрите сигналы ien, serial, errorEvent, что на них и т.д. откатывайте. ps: пишите четче свои проблемы, иначе вас просто начнут игнорить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба output oserial, oerserial // Выходные данные reg [8:0] result; assign oerserial = result; И всё равно почему-то при функциональной симуляции на oerserial ничего нет Предупреждения смотреть по соблюдению разрядности. RTL просмотрщик. Вы от 9 разрядного регистра оставили result[0]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться