/ xmlrom.vhd.in
xmlrom.vhd.in
1 library IEEE; 2 use std.textio.all; 3 use IEEE.std_logic_1164.all; -- defines std_logic types 4 use IEEE.STD_LOGIC_ARITH.ALL; 5 use IEEE.STD_LOGIC_UNSIGNED.ALL; 6 use IEEE.STD_LOGIC_TEXTIO.ALL; 7 8 use work.IDROMConst.all; 9 use work.PIN_@PIN@.all; 10 use work.@CARD@.all; 11 use work.idrom_tools.all; 12 13 entity xmlrom_@PIN@ is 14 15 function GetPinDesc(i: integer) return PinDescRecord is 16 begin 17 return MakePinRecord(PinDesc(i)); 18 end function; 19 20 procedure WriteTag(file f: TEXT; tname: string; tvalue: string) is 21 variable so: line; 22 begin 23 write(so, string'("<")); 24 write(so, tname); 25 write(so, string'(">")); 26 write(so, tvalue); 27 write(so, string'("</")); 28 write(so, tname); 29 write(so, string'(">")); 30 writeline(f, so); 31 end procedure; 32 33 procedure WriteTag(file f: TEXT; tname: string; tvalue: integer) is 34 variable so: line; 35 begin 36 write(so, string'("<")); 37 write(so, tname); 38 write(so, string'(">")); 39 write(so, tvalue, LEFT, 1); 40 write(so, string'("</")); 41 write(so, tname); 42 write(so, string'(">")); 43 writeline(f, so); 44 end procedure; 45 46 procedure WriteTagHex(file f: TEXT; tname: string; tvalue: integer) is 47 variable so: line; 48 variable h: string(1 to 8); 49 variable v: integer; 50 constant hexchars : string(1 to 16) := "0123456789abcdef"; 51 begin 52 write(so, string'("<")); 53 write(so, tname); 54 write(so, string'(">0x")); 55 v := tvalue; 56 for i in 7 downto 0 loop 57 h(i+1) := hexchars(v mod 16 + 1); 58 v := v / 16; 59 end loop; 60 write(so, h); 61 write(so, string'("</")); 62 write(so, tname); 63 write(so, string'(">")); 64 writeline(f, so); 65 end procedure; 66 67 function b2i(v: boolean) return integer is 68 begin 69 if(v) then return 1; else return 0; end if; 70 end function; 71 72 end xmlrom_@PIN@; 73 74 architecture bbb of xmlrom_@PIN@ is 75 file output_file : TEXT open write_mode is in "/dev/stdout"; 76 begin 77 process 78 variable so: line; 79 variable i: integer; 80 variable mr : ModuleRecord; 81 variable pr : PinDescRecord; 82 begin 83 write(so, string'("<?xml version=""1.0""?>")); 84 writeline(output_file, so); 85 write(so, string'("<hostmot2>")); 86 writeline(output_file, so); 87 WriteTag(output_file, string'("version"), 3); 88 WriteTagHex(output_file, string'("vendor"), 89 conv_integer(signed(BoardNameLow))); 90 WriteTag(output_file, string'("vendorname"), BoardVendor(BoardNameLow)); 91 WriteTagHex(output_file, string'("board"), 92 conv_integer(signed(BoardNameHigh))); 93 WriteTag(output_file, string'("boardname"), 94 BoardName(BoardNameLow, BoardNameHigh, PortWidth)); 95 WriteTag(output_file, string'("fpgasize"), conv_integer(fpgasize)); 96 WriteTag(output_file, string'("fpgapins"), conv_integer(fpgapins)); 97 WriteTag(output_file, string'("ioports"), conv_integer(ioports)); 98 WriteTag(output_file, string'("iowidth"), conv_integer(iowidth)); 99 WriteTag(output_file, string'("portwidth"), conv_integer(portwidth)); 100 WriteTag(output_file, string'("ledcount"), conv_integer(ledcount)); 101 WriteTag(output_file, string'("sepclocks"), b2i(sepclocks)); 102 WriteTag(output_file, string'("onews"), b2i(onews)); 103 WriteTag(output_file, string'("clocklow"), conv_integer(clocklow)); 104 WriteTag(output_file, string'("clockhigh"), conv_integer(clockhigh)); 105 -- WriteTag(output_file, string'("inststride0"),conv_integer(inststride0)); 106 -- WriteTag(output_file, string'("inststride1"),conv_integer(inststride1)); 107 -- WriteTag(output_file, string'("regstride0"), conv_integer(regstride0)); 108 -- WriteTag(output_file, string'("regstride1"), conv_integer(regstride1)); 109 110 write(so, string'("<modules>")); 111 writeline(output_file, so); 112 113 for i in 0 to MaxModules-1 loop 114 mr := ModuleId(i); 115 if(mr.GTag = NullTag) then 116 exit; 117 end if; 118 write(so, string'("<module>")); 119 writeline(output_file, so); 120 121 WriteTag(output_file, string'("index"), i); 122 WriteTag(output_file, string'("tag"), 123 conv_integer(mr.GTag)); 124 WriteTag(output_file, string'("tagname"), 125 TagToName(mr.GTag)); 126 WriteTag(output_file, string'("version"), 127 conv_integer(mr.Version)); 128 WriteTag(output_file, string'("numinstances"), 129 conv_integer(mr.NumInstances)); 130 WriteTag(output_file, string'("numregisters"), 131 conv_integer(mr.NumRegisters)); 132 WriteTag(output_file, string'("strides"), 133 conv_integer(mr.Strides)); 134 WriteTag(output_file, string'("multregs"), 135 conv_integer(signed(mr.MultRegs))); 136 WriteTag(output_file, string'("baseaddr"), 137 conv_integer(mr.BaseAddr)); 138 WriteTag(output_file, string'("clock"), 139 conv_integer(mr.Clock)); 140 141 write(so, string'("</module>")); 142 end loop; 143 write(so, string'("</modules>")); 144 writeline(output_file, so); 145 146 write(so, string'("<pins>")); 147 for i in 0 to IOWidth-1 loop 148 write(so, string'("<pin>")); 149 writeline(output_file, so); 150 151 WriteTag(output_file, string'("index"), i); 152 153 pr := GetPinDesc(i); 154 155 WriteTag(output_file, string'("connector"), 156 Conn(BoardNameLow, BoardNameHigh, i, PortWidth)); 157 if(PortWidth = 24) then 158 WriteTag(output_file, string'("pinno"), 159 conv_integer(i) mod 24*2+1); 160 elsif(PortWidth = 17) then 161 WriteTag(output_file, string'("pinno"), 162 conv_integer(i) mod 17+1); 163 end if; 164 WriteTag(output_file, "secondarymodule", conv_integer(pr.SecFunc)); 165 WriteTag(output_file, "secondarymodulename", TagToName(pr.SecFunc)); 166 WriteTag(output_file, "secondaryfunction", conv_integer(pr.SecPin)); 167 WriteTag(output_file, "secondaryfunctionname", 168 Funct(pr.SecFunc, pr.SecPin)); 169 170 if(pr.SecFunc /= NullTag) then 171 if((pr.SecInst and x"80") /= 0) then 172 WriteTag(output_file, "secondaryinstance", string'("ALL")); 173 else 174 WriteTag(output_file, "secondaryinstance", 175 conv_integer(pr.SecInst)); 176 end if; 177 end if; 178 179 write(so, string'("</pin>")); 180 writeline(output_file, so); 181 end loop; 182 write(so, string'("</pins>")); 183 writeline(output_file, so); 184 write(so, string'("</hostmot2>")); 185 writeline(output_file, so); 186 187 wait; 188 end process; 189 end bbb; 190