CaPpuCcino 0 26 октября, 2005 Опубликовано 26 октября, 2005 · Жалоба Если посмотреть стандарт IEEE1394-1995, Annex A.2, то можно увидеть это: output_declaration ::= output[range] list_of_port_identifiers; У Вас есть объявления вида output reg, что допускается в Verilog 2001. Если хотите писать в стиле 95, то объявите просто output, и reg с таким же именем. <{POST_SNAPBACK}> я не знаю наизусть стандарт, поэтому могу ошибаться. по моему разумению дело обстоит так: в 95ом обЪявление модуля не может содержать ничего кроме списка идентификаторов портов, а декларация портов находиться внутри тела модуля, т.е.: module (a,b,c,d,e);//идентификаторы input a; //декларации портов output reg b; input c; output d; output [7:0] e; wire c; reg d; reg [7:0]e;//регистров по желанию совпадающих с названием портов ... endmodule в 2001 декларации можно выносить в шапку: module ( input a, output reg b, input c, output reg d, output reg [7:0] e); ... endmodule фишка в том что я привык писать параметризируемые модули! и если ширина порта определяется параметром, то приходится использовать стиль 95 - потому как конструкция типа такой не прокатит из-за области видимости параметров : //v2001 module ( input [data_width-1:0] a, output reg [data_width-1:0] b ); parameter data_width=8; ... endmodule приходится писать так : //v'95 module (a, b ); parameter data_width=8; input [data_width-1:0] a; output reg [data_width-1:0] b; ... endmodule загвоздка здесь была в том что параметр рассчитывается в функции описаной по стилю v2001: module (a, b ); `include "power.v" parameter data_width=some_function(some_other_parameter); input [data_width-1:0] a; output reg [data_width-1:0] b; ... endmodule файл power.v: some_function (input integer some_other_parameter); ... endfunction все остальные компиляторы едят это с удовольствием, а вот любимый синплифай воротит морду - т.е. нужно переписывать заголовки функций чтобы ему понравится - как подругому бороться с этим мне пока неизвестно вот такая фишкa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 26 октября, 2005 Опубликовано 26 октября, 2005 · Жалоба Это как это "инициализированных при декларации регистров в Verilog"? Что, уже можно написать: reg a = 1; и это будет синтезабельная конструкция? Да это с версии 8.2.1 синтезабельная конструкция: Initial values specified in the RTL for sequential elements and memories can be mapped to startup values on the FPGA. Xilinx devices support power on startup values for registers and memories. Initial values specified in Verilog are converted to a technology independent attribute called syn_init_val by the compiler. The attribute is then carried on the inferred logic, which is passed on to the technology mapper to generate a startup value for the mapped sequential element. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 26 октября, 2005 Опубликовано 26 октября, 2005 · Жалоба По поводу лекарства: Если стоит 8.2 то она его просто патчит, а устанавливать заново пока не пытался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
id_gene 0 27 октября, 2005 Опубликовано 27 октября, 2005 · Жалоба если вы хотите в 2001 стиле просто описать параметризированные порты, то это можно сделать так: module fifo_write #( parameter DATA_WIDTH = 32, parameter ADDR_WIDTH = 3 ) ( input clk, input [ADDR_WIDTH-1:0] addr, input [DATA_WIDTH-1:0] data, .... parameter FIFO_DEPTH = 1 << ADDR_WIDTH; reg [DATA_WIDTH-1:0] MEM_ARRAY [0:FIFO_DEPTH-1]; тогда переопределение параметров при вызове делается : fifo_write #(16,4) fifo_0 (core_clk, addr, data or fifo_write #(.DATA_WIDTH ( 16 )) fifo_0 ( Обратите внимание, что имя компонента стоит после параметров. А вот с функцией - тут, похоже, уже не помочь ничем Возможно, разнесение output и reg может помочь (это тоже 2001 стиль) спасибо за интересный пример Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 27 октября, 2005 Опубликовано 27 октября, 2005 · Жалоба если вы хотите в 2001 стиле просто описать параметризированные порты, то это можно сделать так: module fifo_write #( parameter DATA_WIDTH = 32, parameter ADDR_WIDTH = 3 ) ( input clk, input [ADDR_WIDTH-1:0] addr, input [DATA_WIDTH-1:0] data, .... parameter FIFO_DEPTH = 1 << ADDR_WIDTH; reg [DATA_WIDTH-1:0] MEM_ARRAY [0:FIFO_DEPTH-1]; [/code] <{POST_SNAPBACK}> спасибо - встроенное обявление параметров я как-то из виду упустил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться