#verilog
Вопрос:
Я пытаюсь настроить часы и делитель для вывода тактового сигнала 2 Гц для другого раздела моего кода. У меня есть два модуля, один для часов и один для делителя, и я настроил его так, чтобы выход часов был входом в делитель, но когда я беру выход делителя, это та же скорость, что и просто наличие часов. Есть ли что-то, чего мне не хватает?
Вот код для модуля часов:
module clock(clk); output reg clk; always #5 clk = ~clk; initial clk = 0; endmodule
Вот код модуля делителя:
module clock_div(clk_in, reset, clk_out); input clk_in; input reset; output reg clk_out; parameter divider = 50000000; parameter n = 24; reg [n-1:0] count; initial begin clk_out lt;= 1'b0; end always @(posedge clk_in or posedge reset) begin if(reset) begin count lt;= 0; clk_out lt;= 1'b0; end else begin if(count == divider) begin count lt;= 0; clk_out lt;= ~clk_out; end else begin count lt;= count 1'b1; end end end endmodule
Заранее спасибо за любую помощь!
Комментарии:
1. Вам нужно создать экземпляр clock_div внутри модуля часов. Подключите выход clk модуля синхронизации к входу clk_in экземпляра clk_div. Создайте провод clk_out в модуле синхронизации и сбросьте его переходы в виде сигнала.
Ответ №1:
Ваш код представляет собой только части среды и не может работать сам по себе. Итак, невозможно понять, как вы смоделировали это и следили за часами.
Вам нужно соединить эти части вместе, чтобы ваши часы подавались в модуль делителя, а выход контролировался. Итак, вот пример модуля испытательного стенда, который это делает. Вы можете создать свой собственный на основе этого примера.
module top; wire clk, div_clk; reg reset; // instantiate your module, this part is required for simulation or fpga // this instantiates the clock module and generated base clock clock clock(.clk(clk)); // this instantiates the divider module, feeding in the clock from the previous module clock_div clock_div(.clk_in(clk), .reset(reset), .clk_out(div_clk)); // here is an example of a test bench code for simulation only initial begin // just prints out values of both clocks; you can generate waveforms instead. $monitor(clk, div_clk); // handle initial reset reset = 1; #10 reset = 0; // let it simulate for a certain amount of time and finish #2_0000_0000 $finish; end endmodule
Комментарии:
1. Спасибо за ответ! Модули фактически подключены с помощью файла схемы. Я сделал это, потому что эти часы и разделитель являются частью более крупного проекта, в котором есть другие компоненты, выполненные в файлах схем. Делает ли это то, что меня бесит?
2. вы не показали, как вы подключили экземпляры. Что такое «файлы схем»?