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

judchin

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный
  1. В момент фронта clock reset может быть "0" (хотя спад был раньше), при этом q = "0", а должна быть "1". Приоритет событий должен быть одинаковый. Одновременно оба события априори произойти не могут.
  2. По фронтам будут запускаться последовательно другие модули. Из-за "иголок" другие модули будут запускаться не в свое время! Как их убрать?
  3. Добрый день! Понадобился дешифратор 3->8, взял пример программы отсюда: http://www.dsol.ru/stud/book7/chapter6/page6_03.html module decode (Ain, En, Yout); input En; input [2:0] Ain; output [7:0] Yout; reg [7:0] Yout; always @(En or Ain) begin if (!En) Yout = 8'b0; else case (Ain) 3'b000 : Yout = 8'b00000001; 3'b001 : Yout = 8'b00000010; 3'b010 : Yout = 8'b00000100; 3'b011 : Yout = 8'b00001000; 3'b100 : Yout = 8'b00010000; 3'b101 : Yout = 8'b00100000; 3'b110 : Yout = 8'b01000000; 3'b111 : Yout = 8'b10000000; default : Yout = 8'b00000000; endcase end endmodule Все бы хорошо, но только иногда возникают непонятные "иголки" (см. рисунок). переписал по-своему: module Desh_3__ (in, t); input wire [2:0] in; output wire [7:0] t; assign t[0] = ~(in[0] | in[1] | in[2]); assign t[1] = ~(~in[0] | in[1] | in[2]); assign t[2] = ~(in[0] | ~in[1] | in[2]); assign t[3] = in[0] & in[1] & ~in[2]; assign t[4] = ~(in[0] | in[1] | ~in[2]); assign t[5] = in[0] & ~in[1] & in[2]; assign t[6] = ~in[0] & in[1] & in[2]; assign t[7] = in[0] & in[1] & in[2]; endmodule Результат такой же! в чем проблема?
  4. Извините за невежество, но ответа я там не вижу! У меня два события: по одной линии (тактовой) с заданным периодом идут инвертированные тактовые импульсы (постоянно "1" и через определенный период короткий импульс "0") Фронт другой линии может наступить только синхронно с тактовой (а может и не наступить). Спад может наступить в любое время. Необходимо по фронту тактовый линии устанавливать значение регистра, а по спаду второй линии сбрасывать это значение. На основе VerilogLessons.pdf код always @(posedge clock or negedge reset) begin if (!reset) begin q <= 0; end else begin q <= 1; end end работает не корректно, т. к. в момент фронта clock, reset может быть в любом состоянии. В условии проверять clock также не получиться т.к. он всегда равен "1" в следующий момент за событиями! P.S. Я почти реализовал графическим синтезом (осталось гонки отследить), но хотелось бы на Verilog'e. Причем графически оказалось все очень просто! Схема и диаграммы во вложении.
  5. Добрый вечер! Я знаю, что эта тема неоднократно поднималась на форуме, но я своего ответа так и не нашел. Был код на микроконтроллере, в котором, (в упрощенном случае) по 2 внешним прерываниям (int_0 и int_1) изменялась одна переменная (допусти при одном устанавливалась в 1 при другом сбрасывалась). Причем принципиально чтобы изменение переменной происходило именно по перепадам int_0 и int_1. неправильное решение "в лоб": always @(posedge int_0) begin L <= 1; end always @(negedge int_1) begin L <= 0; end был вариант: always @(posedge int_0 or negedge int_1) begin if (int_0) L <= 1; else L <= 0; end но в симуляторе работает не так как надо!
×
×
  • Создать...