У меня есть АЦП, который требует, чтобы я отправил ему 20 тактовых импульсов при запросе на чтение данных из его внутреннего регистра (после того, как я запустил его для чтения данных с моего датчика).
Я смог отлично смоделировать это в ModelSim, но я новичок в Verilog и не осознавал, что у меня возникнут проблемы во время синтеза при создании последовательности импульсов следующим образом:
reg [4:0] counter = 5'b10100;
parameter counter = 0;
always (posedge clk and negedge clk)
begin
if (counter > 0)
begin
counter <= counter - 1;
serial_out <= ~serial_out;
end
end
Я попытался разбить это на 2 блока always: один, который устанавливает для serial_out значение 1 в posedge clk, а другой устанавливает для serial_out значение 0 во время negedge clk, оба проверяют, больше ли счетчик 0. Это проблематично, потому что я пытаюсь управлять счетчик в двух местах и получить сообщение об ошибке «не удается разрешить несколько постоянных драйверов для сетевого счетчика..»
Возможно, есть лучший способ сделать это?
Я видел несколько сообщений, предлагающих удвоить частоту clk, чтобы считывать данные с часов. Это сработает, но мне нужно поддерживать частоту 30 МГц (не могу перейти на 60 МГц по другим причинам).
Как бы вы предложили мне условно маршрутизировать/реплицировать 20 импульсов моих постоянно включенных периодических входных тактовых импульсов с частотой 30 МГц на выходной контакт?
Любая помощь будет оценена.
Я бы предложил использовать выходной триггер DDR. Как вы это реализуете, зависит от того, какую FPGA вы используете. Для Xilinx это будет примитив ODDR или ODDR2. Для Altera это ALTDDIO_OUT.
'1'
→ высокий переход, а '0'
после высокого→низкий переход).
Олдфарт
ричер33