ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
600042
POV (24.05.2015 21:04 - 22:18, просмотров: 27847)
И вновь Verilog - непонятки с блоком always... вот упрощенно, без лишнего always @(posedge load or posedge clock or posedge inc) begin if (inc) q <= q + 1; end Реагировать хочу на несколько сигналов, но как выбрать реакцию на отдельный? Как приведено выше не работает - судя по симуляции (да и по осцилографу) это увеличение на 1 происходит постоянно, шум сплошной, на выходе число большее на много-много (пропорционально длине импульса) - см. рисунок. Скорее всего, конечно же, это два других сигнала малину портят. Но быть-то как? Если же сделаю вот так always @(posedge inc) begin q <= q + 1; end то проблем нет Чего я не догнал? Как быть? Это блок - кусок описания сдвигового регистра со всякими способами загрузками и инкремента содержимого. И таких регистров будет использовано несколько. Потому делать несколько блочков на каждый сигнал чрезвычайно неудобно. PS Вот такое вот тоже не прокатило. Чего-то я не понимаю always @(posedge load or posedge clock or posedge inc) begin qwe[2] <= load; qwe[1] <= clock; qwe[0] <= inc; case (qwe) 3'b100: q <= data; 3'b010: {shiftout, q[17:1], q[0]} <= {q[17], q[16:0], shiftin}; 3'b001: q <= q + 1; endcase end
image