Jump to content

    
Sign in to follow this  
lexus.mephi

Как задать большущее hex-число?

Recommended Posts

Есть большой hex-вектор, который я задаю так:

        wire        [0:2623] pn_seq;
    assign pn_seq = {    316'h4DC2AF7BD8C3C9A1E76C9A090AF1C3114F07FCA2808E9462E9AD7B712D6F4AC8A59BB069CC5
0BF1,
                        316'h149927E6BB1C9FC8C18BB949B30CD09DDD749E704F57B41DEC7E7B176E12C5657432B51B0B8
12DF,
                        320'h0E14887E24D80C97F09374AD76270E58FE1774B2781D8D3821E393F2EA0FFD4D24DE20C05D0
BA170,
                        316'h3D10E52D61E013D837AA62D007CC2FD76D23A3E125BDE8A9A7C02A98B70251C556F6341EBDE
CB80,
                        316'h1AAD5D9FB8CBEA80BB619096527A8C475B3D8DB28AF8543A00EC3480DFF1E2CDA9F985B523B
8790,
                        320'h07AA5D0CE58D21B18631006617F6F769EB947F924EA5161EC2C0488B63ED7993BA8EF4E552F
A32FC,
                        320'h3F1BDB19923902BCBBE5DDABB824126E08459CA6CFA0267E5294A98C632569791E60EF659AE
E9518,
                        324'hCDF08D87833690C1B79183ED127E53360CD86514859A28B5494F51AA4882419A25A2D01A5F4
7AA273,
                        76'h01E79A5370CCB3E197F};

 

В VCS последовательность читается нормально, а ModelSim разбивает вектор по 32 разряда и вставляет 32-битные нулевые вектора между частями:

...01E0000000079A5370C00000000CB3E197F};

 

Уже попробовал и в 1 строку все написать, и сделать конкатенацию 32-битных векторов. Что-то пока глухо. Может кто подскажет решение?

 

Заранее спасибо!

Share this post


Link to post
Share on other sites

Попробовать сделать кучу проводов и потом собрать их в кучу. А вообще это привет тем кто доказывает что моделсимы ничем не хуже каденсов синопсисов.

Share this post


Link to post
Share on other sites
Попробовать сделать кучу проводов и потом собрать их в кучу. А вообще это привет тем кто доказывает что моделсимы ничем не хуже каденсов синопсисов.

 

Да, такой вариант конечно же прокатит - просто так не хотелось создавать дополнительных 82 вектора. И generate тут не поможет, т.к. значения у всех веторов разные. Печалька с этим ModelSim'ом.

 

Спасибо!

Share this post


Link to post
Share on other sites

а разбить большой вектор на 82 по 32 через quietly virtual signal не вариант?

 

Пример:

quietly virtual signal -install tb/uut_down { tb/uut_down/S00_AXI_AWADDR(31 downto 7)} awaddr_dn

#add wave -noupdate -format Logic -radix hexadecimal tb/uut_down/S00_AXI_AWADDR

add wave -noupdate -format Logic -radix unsigned tb/uut_down/awaddr_dn

Share this post


Link to post
Share on other sites

У меня были схожие неприятности с ncsim. решились так:

 

reg [127:0] vector;

 

initial

begin

 

vector = {{5'b00110},{5'b00110},{5'b00110},{5'b00101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000110},{6'b000100},{6'b000011},{6'b000101},{6'b100000}};

 

end //initial

 

В Вашем случае: разбить на 32- или 64-битовые куски, а потом склеить {{}, {}, ...}.

Share this post


Link to post
Share on other sites
У меня были схожие неприятности с ncsim. решились так:

 

reg [127:0] vector;

 

initial

begin

 

vector = {{5'b00110},{5'b00110},{5'b00110},{5'b00101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000101},{6'b000110},{6'b000100},{6'b000011},{6'b000101},{6'b100000}};

 

end //initial

 

В Вашем случае: разбить на 32- или 64-битовые куски, а потом склеить {{}, {}, ...}.

Так я пробовал - не помогло. Modelsim'у нужно 82 именованных вектора, чтоб он нули не пихал. В итоге вот такая борода получилась:

    assign                        
    pn_seq1 = 32'h4DC2AF7B,
    pn_seq2 = 32'hD8C3C9A1,
    pn_seq3 = 32'hE76C9A09,
    pn_seq4 = 32'h0AF1C311,
    pn_seq5 = 32'h4F07FCA2,
    pn_seq6 = 32'h808E9462,
    pn_seq7 = 32'hE9AD7B71,
    ...
    pn_seq81 = 32'h79A5370C,
    pn_seq82 = 32'hCB3E197F;                    
    
    assign pn_seq = {pn_seq1, pn_seq2, pn_seq3, pn_seq4, pn_seq5, pn_seq6, pn_seq7, pn_seq8, pn_seq9, pn_seq10,
                    pn_seq11, pn_seq12, pn_seq13, pn_seq14, pn_seq15, pn_seq16, pn_seq17, pn_seq18, pn_seq19, pn_seq20,
                    pn_seq21, pn_seq22, pn_seq23, pn_seq24, pn_seq25, pn_seq26, pn_seq27, pn_seq28, pn_seq29, pn_seq30,
                    pn_seq31, pn_seq32, pn_seq33, pn_seq34, pn_seq35, pn_seq36, pn_seq37, pn_seq38, pn_seq39, pn_seq40,
                    pn_seq41, pn_seq42, pn_seq43, pn_seq44, pn_seq45, pn_seq46, pn_seq47, pn_seq48, pn_seq49, pn_seq50,
                    pn_seq51, pn_seq52, pn_seq53, pn_seq54, pn_seq55, pn_seq56, pn_seq57, pn_seq58, pn_seq59, pn_seq60,
                    pn_seq61, pn_seq62, pn_seq63, pn_seq64, pn_seq65, pn_seq66, pn_seq67, pn_seq68, pn_seq69, pn_seq70,
                    pn_seq71, pn_seq72, pn_seq73, pn_seq74, pn_seq75, pn_seq76, pn_seq77, pn_seq78, pn_seq79, pn_seq80,
                    pn_seq81, pn_seq82};

Если б диплом писал, то был бы рад такому объемному коду :D А для работы хочется все покомпактнее.

Share this post


Link to post
Share on other sites

Видимо, "или песни, или танцы"..

 

Еще порекомендую считывать значения из файла и заполнять вектор (если для симуляции), но, думаю, что и этот вариант Вы рассматривали.

 

Modelsim'у нужно ...

для работы хочется ...

 

Share this post


Link to post
Share on other sites

А если функцию написать в которой задать эти числа в виде обычной строки, а она эти строки переконвертирует в битовый вектор и возвратит его?

Share this post


Link to post
Share on other sites

А у меня всё правильно работает, Modelsim SE 10.1c, тест использовал следующий:

module top;
wire        [0:2623] pn_seq;
    assign pn_seq = {   316'h4DC2AF7BD8C3C9A1E76C9A090AF1C3114F07FCA2808E9462E9AD7B712D6F4AC8A59BB069CC5
0BF1,
                        316'h149927E6BB1C9FC8C18BB949B30CD09DDD749E704F57B41DEC7E7B176E12C5657432B51B0B8
12DF,
                        320'h0E14887E24D80C97F09374AD76270E58FE1774B2781D8D3821E393F2EA0FFD4D24DE20C05D0
BA170,
                        316'h3D10E52D61E013D837AA62D007CC2FD76D23A3E125BDE8A9A7C02A98B70251C556F6341EBDE
CB80,
                        316'h1AAD5D9FB8CBEA80BB619096527A8C475B3D8DB28AF8543A00EC3480DFF1E2CDA9F985B523B
8790,
                        320'h07AA5D0CE58D21B18631006617F6F769EB947F924EA5161EC2C0488B63ED7993BA8EF4E552F
A32FC,
                        320'h3F1BDB19923902BCBBE5DDABB824126E08459CA6CFA0267E5294A98C632569791E60EF659AE
E9518,
                        324'hCDF08D87833690C1B79183ED127E53360CD86514859A28B5494F51AA4882419A25A2D01A5F4
7AA273,
                        76'h01E79A5370CCB3E197F};
initial begin
  #10;
  $display("%h", pn_seq);
  $stop(2);
end
endmodule

Или глюки начинаются, если включить это в модуль посложнее?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this