Как изменить тактовую частоту с помощью делителя?

#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. вы не показали, как вы подключили экземпляры. Что такое «файлы схем»?