вопрос: RS триггер тактируется?
так вот это и есть нетактируемая логика,
а именно:
wire q,q1;
assign q2 = ~(r&q1);
assign q1 = ~(s&q2);
конечно можно сделать конструкцию и по фронтам и по дополнительному клоку.
Далее: код автора:
assign wire_buf[0] = data_buf[0] & clk_30hz;
Ваш код:
data_buf <= wire_buf;
как минимум приемник с источником поменян. А наоборот не поставить: ибо wire_buf это провод, а провода могут помнить, только если их намотать на ферритовое кольцо и то не долго.
конкретно этот код "wire_buf[0] = data_buf[0] & clk_30hz" генерит только 1 логический элемент "И" и ничего больше.
TommyVersace писал(а):enable это enable, clk - всегда тактовая частота
с какого это перепугу?
TommyVersace писал(а):Мой код не защелкивает по клоку, а переписывает данные, это принципиально разные вещи.
always @(posedge clk or negedge reset)
begin
if (!reset) data_buf <= 'h0;
else data_buf <= wire_buf;
end
[/quote]
Если это не защелкивание по posedge clk, то что же еще??? Если мне не верите, то сгенерите проект и посмотрите результаты синтеза.
дальше:
TommyVersace писал(а):Ваш assign по posedge clk пишет данные в регистр, а по negedge этот регистр сбрасывает. Во первых это не то, что интересовало автора, а во вторых эта конструкция не будет работать на частотах выше 100 MHz (примерно).
какой еще negedge ???? Какие 100MHz ??? какой assign по posedge clk ???????? что это за бред??? откуда это взялось????
Конструкция пишет в регистр каждый posedge fastCLK то ли состояние регистра data_buf, то ли 0 в зависимости от состояния линии clk_30hz на текущий момент.
TommyVersace писал(а): Из Вашего "последовательного" кода я делаю вывод что Вы никогда не имели дела со схемой в которой используется несколько тактовых доменов.
совершенно напрасно - писал, большие и на 3х клоках, и как ни странно - рабочие . если Вы читали вопрос автора(а он как ни странно относился к синтаксису языка) я дал полный и развернутый ответ
FPGAlover писал(а):не могу представить зачем Вам понадобился ТАКОЙ функционал, но технически это можно сделать так:
И наконец на счет пункта 5.- я использовал обозначения предложенные автором.
Кстати, неплохо бы было хотя бы прогнать проект(ы) автора, свои и мои через симуляцию прежде чем лезть в категоричную полемику.
и задачка по теме на закуску, так сказать для подтверждения квалификации: что делает этот код и где тут ПРИНЦИПИАЛЬНАЯ ошибка и в чем она выражается:
(сигнал rx тактируется другим доменом, а частота clk достаточная что бы отловить все изменения rx)
module NEdedector(
input clk, nreset,
input rx,
output reg detect,
input clear_result
);
reg tmp;
always @(posedge clk or negedge nreset) begin
tmp<=rx;
if (!nreset) detect<=1'b0;
else begin
if (~rx&tmp) detect<=1'b1;
end
end
Шоб я польку танцевал..