Alex_P 0 17 июля, 2006 Опубликовано 17 июля, 2006 · Жалоба При инициализации регистров, описанных на Verilog в Quartus 3.0 при симуляции выдаются нули. Регистр объявлен следующим образом: reg [3:0] data = 4'h3; Но при симуляции в регистре data нулевое значение. Как инициализировать регист? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tocha 0 17 июля, 2006 Опубликовано 17 июля, 2006 · Жалоба При инициализации регистров, описанных на Verilog в Quartus 3.0 при симуляции выдаются нули. Регистр объявлен следующим образом: reg [3:0] data = 4'h3; Но при симуляции в регистре data нулевое значение. Как инициализировать регист? Завести на него сигнал сброса Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_P 0 18 июля, 2006 Опубликовано 18 июля, 2006 · Жалоба Раньше я работал в ISE и там с этим небыло проблем. Т.е. инициализировать регистры в Quartuse можно только по внешнему сигналу сброса и если он не заведен, то инициализация невозможна? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 18 июля, 2006 Опубликовано 18 июля, 2006 · Жалоба Если речь идет о синтезе, то это игнорируется. Да и триггер должен быть с входом 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. В третьем Квартусе лучше не работать. Устарел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_P 0 18 июля, 2006 Опубликовано 18 июля, 2006 · Жалоба В 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 эта конструкция интерпретируется как счетчик без начальной загрузки, т.е. счет начинается с нуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 18 июля, 2006 Опубликовано 18 июля, 2006 · Жалоба output reg [7:0] data = 8'h12////// Мне кажется, Вы заблуждаетесь. Не может это храниться в прошивочном ПЗУ. При синтезе это должно игнорироваться. Если нет указаний синтезатору. О которых Вы не сказали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
druzhin 4 24 июля, 2006 Опубликовано 24 июля, 2006 · Жалоба 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. Альтеристы, завидуйте нам. Разумеется, надо корректно делать первоначальный сброс-инициализацию кристалла и не полагаться на такие извращённо-недокументированные возможности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MurrVK 0 24 июля, 2006 Опубликовано 24 июля, 2006 · Жалоба Если вы используете Циклоны или Стратиксы, можно извратиться следующим образом - с помощью атрибут синтеза описать ваш регистр как память плиса и проинициализировать его *.mif файлом. Это будет выглядеть примерно следующим образом: reg [3:0] data /* synthesis ramstyle = "M4K" ram_init_file = "my_init_file.mif" */; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться