在verilog中怎么描述ROM并赋值?
时间:10-02
整理:3721RD
点击:
subtype ROM_WORD is std_logic_vector (31 downto 0);
type ROM_TABLE is array (0 to 15) of ROM_WORD;
constant Zero_32 :ROM_WORD := "00000000000000000000000000000000";
constant RomWord13 :ROM_WORD := "000000000000000000000000"& CAP_PTR;
constant RomWord15 :ROM_WORD := MAX_LAT & MIN_GNT & INT_PIN &INT_LINE;
constant ROM: ROM_TABLE := ROM_TABLE'(
ROM_WORD'(DEVICE_ID & VENDOR_ID),
ROM_WORD'(Zero_32),
ROM_WORD'(CLASS_ID & REV_ID),
ROM_WORD'(Zero_32),
ROM_WORD'(BAR0_MAP),
ROM_WORD'(BAR1_MAP),
ROM_WORD'(BAR2_MAP),
ROM_WORD'(BAR3_MAP),
ROM_WORD'(BAR4_MAP),
ROM_WORD'(BAR5_MAP),
ROM_WORD'(Zero_32),
ROM_WORD'(SUBDEVICE_ID & SUBVENDOR_ID,
ROM_WORD'(EBAR_MAP),
ROM_WORD'(RomWord13),
ROM_WORD'(Zero_32),
ROM_WORD'(MAX_LAT & MIN_GNT & INT_PIN &INT_LINE));
以上是VHDL写的,32位宽,深度16的ROM,并赋值。verilog中怎么写? 多谢!
type ROM_TABLE is array (0 to 15) of ROM_WORD;
constant Zero_32 :ROM_WORD := "00000000000000000000000000000000";
constant RomWord13 :ROM_WORD := "000000000000000000000000"& CAP_PTR;
constant RomWord15 :ROM_WORD := MAX_LAT & MIN_GNT & INT_PIN &INT_LINE;
constant ROM: ROM_TABLE := ROM_TABLE'(
ROM_WORD'(DEVICE_ID & VENDOR_ID),
ROM_WORD'(Zero_32),
ROM_WORD'(CLASS_ID & REV_ID),
ROM_WORD'(Zero_32),
ROM_WORD'(BAR0_MAP),
ROM_WORD'(BAR1_MAP),
ROM_WORD'(BAR2_MAP),
ROM_WORD'(BAR3_MAP),
ROM_WORD'(BAR4_MAP),
ROM_WORD'(BAR5_MAP),
ROM_WORD'(Zero_32),
ROM_WORD'(SUBDEVICE_ID & SUBVENDOR_ID,
ROM_WORD'(EBAR_MAP),
ROM_WORD'(RomWord13),
ROM_WORD'(Zero_32),
ROM_WORD'(MAX_LAT & MIN_GNT & INT_PIN &INT_LINE));
以上是VHDL写的,32位宽,深度16的ROM,并赋值。verilog中怎么写? 多谢!
看看QuartusII中的EDIT--INSERT TEMPLATE. 里面就有。
可以用RAM代替
然后在simulation开始时用$readmemh("init_data.dat", mem);初始化声明的memory
写个always块,类似如下
always @(*)begin
case(addr)begin
00: data<=xxx;
01: data<=xxx;
10: data<=xxx;
11: data<=xxx;
endcase
end
你这个是FPGA吧,不是ASIC
