Перейти к содержанию
    

Инициализация регистров в Quartus

При инициализации регистров, описанных на Verilog в Quartus 3.0 при симуляции выдаются нули.

 

Регистр объявлен следующим образом:

 

reg [3:0] data = 4'h3;

 

Но при симуляции в регистре data нулевое значение. Как инициализировать регист?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При инициализации регистров, описанных на Verilog в Quartus 3.0 при симуляции выдаются нули.

 

Регистр объявлен следующим образом:

 

reg [3:0] data = 4'h3;

 

Но при симуляции в регистре data нулевое значение. Как инициализировать регист?

 

Завести на него сигнал сброса

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Раньше я работал в ISE и там с этим небыло проблем. Т.е. инициализировать регистры в Quartuse можно только по внешнему сигналу сброса и если он не заведен, то инициализация невозможна?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если речь идет о синтезе, то это игнорируется. Да и триггер должен быть с входом enable, иначе все по клоку собьется. Должен быть со входом clr. А как иначе в железе установить начальное состояние. У Xilinx длчя этого есть чвой примитив. Его наверно тоже на сеты, ресеты подают.

 

/* NOT-GATE PUSH-BACK ON (ALTERA), только для FPGA

*/

module rg_xor_b

(

input clk,

input [7:0] in,

input ce,

input clr,

output reg [7:0] fdce_dffe

);

 

always @ (posedge clk or posedge clr)

begin

if (clr)

fdce_dffe <= 8'd2;

else if (ce)

fdce_dffe <= in;

end

 

endmodule

 

Можно изголяться, опираясь на то , что все регистры по включению устанавливаются в ноль.

Тогда можно обойтись без входов ресет.

 

module rg_xor_a

(

input clk,

input [3:0] in_data,

input enable_clk,

output [3:0] out_data

);

 

reg [3:0] rg_data;

 

assign out_data = rg_data ^ 4'd2; // по включению 4'd2

 

always @ (posedge clk)

begin

if (enable_clk)

rg_data <= in_data ^ 4'd2;

end

 

endmodule

 

Это верилог 2001. В третьем Квартусе лучше не работать. Устарел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В ISE я мог реализовывать следующую конструкцию с сигналом enable:

 

module test (clk, en, data);

input clk;

input en;

output reg [7:0] data = 8'h12;

 

always @(posedge clk) begin

if (en==1) begin

data <= data + 1;

end

end

 

endmodule

 

Насколько я понимаю начальное значение хранится в прошивке и загружается в счетчик из загрузочного ПЗУ.

 

В Quartuse эта конструкция интерпретируется как счетчик без начальной загрузки, т.е. счет начинается с нуля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

output reg [7:0] data = 8'h12//////

Мне кажется, Вы заблуждаетесь.

Не может это храниться в прошивочном ПЗУ. При синтезе это должно игнорироваться.

Если нет указаний синтезатору. О которых Вы не сказали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

output reg [7:0] data = 8'h12//////

Мне кажется, Вы заблуждаетесь.

Не может это храниться в прошивочном ПЗУ. При синтезе это должно игнорироваться.

Если нет указаний синтезатору. О которых Вы не сказали.

Он не заблуждается. Конструкции типа

output reg [7:0] data = 8'h12;

или

output reg [7:0] data; initial data = 8'h12;

почему-то работают на Ксилинксах, сами по себе без других указаний. То есть после включения питания в этих триггерах лежит проинициализированное значение без всяких сбросов-предустановок. Почему так - не знаю, сам был очень удивлён. Многократно проверял на разных кристаллах, лично смотрел в железе осциллографом. Первый раз я это заметил в 2003 году на спартан2, исе5.2.

Альтеристы, завидуйте нам.

 

Разумеется, надо корректно делать первоначальный сброс-инициализацию кристалла и не полагаться на такие извращённо-недокументированные возможности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы используете Циклоны или Стратиксы, можно извратиться следующим образом - с помощью атрибут синтеза описать ваш регистр как память плиса и проинициализировать его *.mif файлом.

 

Это будет выглядеть примерно следующим образом:

 

reg [3:0] data /* synthesis ramstyle = "M4K" ram_init_file = "my_init_file.mif" */;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...