Error simulator 861 failed to link the design

This blog post was supposed to get the previous tutorial's UART running on real hardware. However, my plans were derailed swiftly starting with a glitch.

This blog post was supposed to get the previous tutorial’s UART running on real hardware. However, my plans were derailed swiftly starting with a glitch.

The tutorial’s design would have allowed you to switch an LED on and off remotely, as per the following:

  • When an ‘E’ character is received, then the LED will be switched on, and it will send an ‘E’ back
  • When ‘D’ is received, then the LED will be switched off, and it will send back a ‘D’
  • When any other character is received it will send back a ‘+’ if the LED is on, and ‘.’ if it’s off

The UART receiver worked as expected, switching the LED on and off reliably. However, this is what my computer received back from the FPGA:

Serial data corruptionThey should all be ‘E’, ‘D’, ‘+’, or ‘.’ characters, and not the funny characters you see above. Clearly something isn’t working right.

So far, no big deal. I could use this to teach you why behavioural simulations don’t guarantee that it’ll work on actual hardware. Behavioural simulations assume ideal hardware with zero delays across logic gates and connections. Real hardware does have delays, and the those delays can be the difference between success and failure.

Running an accurate timing simulation (based on the generated hardware) is what was needed to track down the root cause. So, I started up Xilinx ISE and tried to start its simulator. Instead I got:

ERROR:Simulator:861 — Failed to link the design

That’s weird; the design linked okay when generating the hardware. Searching the internet showed that other people had hit the same problem. I tried a few of the suggestions, but none of them worked.

Eventually I discovered that Xilinx ISE officially doesn’t support Windows 8 or higher, and that this likely won’t change. Xilinx ISE has reached its end-of-life (link); their new suite called Vivado is the future. Alas, Vivado only supports Xilinx’s latest devices, and the Spartan6 FPGA on my Papilio Pro is too old.

There’s no way I was going to downgrade my entire machine to Windows 7 for this. And so, everything came grinding to a halt.

New Hardware

I like the Papilio Pro board, but debugging designs without a working timing simulator is like trying to drive in the dark without lights; you can’t see what you’re doing. So I’ve had no choice but to order a new development kit.

The new board is the Terasic Cyclone V GX Starter Kit. It’s not too expensive, and has the features I was looking for:

  • An FPGA with a reasonable amount of resources
  • A reasonable amount of RAM
  • An HDMI output connector (yes, I’m a graphics guy)
  • Some expansion ports for connecting other hardware
  • Various other devices and ports (e.g., audio out, SD-card slot, etc.)

I’ve never used Altera devices before, but I’ve been told that their software is better. My experience with Xilinx’s software hasn’t been great, so I certainly hope so. I’ll find out once it arrives.

Final Words

So, that’s the current situation. The UART tutorial is on hold until I have the new hardware and have learnt how to use Altera’s software. There’s always a learning curve when trying something new… Wish me luck.

Skip to main content

Forum for Electronics

Forum for Electronics

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals… and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

  • Digital Design and Embedded Programming

  • PLD, SPLD, GAL, CPLD, FPGA Design

You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an alternative browser.

Fail to link the disign


  • Thread starter

    MsA7X


  • Start date

    Oct 4, 2016

Status
Not open for further replies.

  • #1

Newbie level 4

Joined
Oct 4, 2016
Messages
6
Helped
0
Reputation

0

Reaction score
0
Trophy points
1
Activity points

53


I’m using ISE xilinx design 14.1 at windows 10 and i have the following problem. When I want to simulate the program with a testbench, it throws an error that says: fail to link the design. I’ve tried to delete collect2.exe as some forum says, but it still don’t work. Someone who can help me?

  • #2

Advanced Member level 7

Joined
Jun 7, 2010
Messages
7,109
Helped
2,080
Reputation

4,179

Reaction score
2,045
Trophy points
1,393
Activity points

39,761


Any reason you’re not using ISE 14.7?
Also, I dont think ISE officially supports windows 10 — can you try windows 7 or linux (maybe in the VM?)?

  • #3

Newbie level 4

Joined
Oct 4, 2016
Messages
6
Helped
0
Reputation

0

Reaction score
0
Trophy points
1
Activity points

53


I’m using 14,1 version because at my university we are using a FPGA that is only compatible with ISE 14,1

  • #4

I’m using 14,1 version because at my university we are using a FPGA that is only compatible with ISE 14,1

Sorry, but the device list is identical between the two ISE versions:
Page 15: ISE 14.1
Page 8: ISE14.7

On the previous page the supported OS(s) for both verisons are:
Microsoft Windows Support
• Windows XP Professional (32-bit and 64-bit), English/Japanese
• Windows 7 Professional (32-bit and 64-bit), English/Japanese
• Windows Server 2008 (64-bit)
Linux Support
• Red Hat Enterprise Workstation 5 (32-bit and 64-bit)
• Red Hat Enterprise Workstation 6 (32-bit and 64-bit)
• SUSE Linux Enterprise 11 (32-bit and 64-bit)

So use ISE 14.7 unless your device compatibility problem is due to licensed vs webpack tool versions, then your out of luck unless your university upgrades their license.
Also as Tricky suggested try a SUSE or Red Hat Linux VM on your Win10 machine that should allow it to run on the correct supported OS.

You might also want to provide the exact messages (log/transcript) of the compilation process, might be something else that is causing your problem that is way further up in the compilation.

  • #5

In internet you can find fix how to fix ISE 14.7 for Win8 and try do the same on Win10.

  • #6

Newbie level 4

Joined
Oct 4, 2016
Messages
6
Helped
0
Reputation

0

Reaction score
0
Trophy points
1
Activity points

53


Yes, something similar I’ve read at a forum but my professor says that we have to use 14,1 version because this is the version we have in our labs

  • #7

Newbie level 4

Joined
Oct 4, 2016
Messages
6
Helped
0
Reputation

0

Reaction score
0
Trophy points
1
Activity points

53


I’ve tried a lot of thing, I’m using this forum as a last resource

  • #8

Full Member level 2

Joined
Nov 21, 2013
Messages
142
Helped
29
Reputation

58

Reaction score
28
Trophy points
1,308
Activity points

2,590


You can try ISE 14.7 on your own PC, develop your code and test on ISE 14.1 of your lab. It will probably work. I doubt you professor will complain, and even if he does, I think it’s worth the risk, because the alternative is to present nothing.

If you still cannot install ISE 14.7 on you PC, you can try to install it on a Virtual Machine (VMware or Virtualbox, for example) with Linux or Windows 7 (if you have the license). Other option is to install a dual-boot Linux, and get the Linux ISE.

A Virtual Machine with ISE is not the best solution, and I would not recommend it in professional environments, but for a class it should be enough. Remember to reserve lot of RAM for your virtual machine if you chose this path.

  • #9

You might also want to provide the exact messages (log/transcript) of the compilation process, might be something else that is causing your problem that is way further up in the compilation.

You still haven’t supplied the above information in case the problem is not the Windows version.

  • #10

Advanced Member level 7

Joined
Jun 7, 2010
Messages
7,109
Helped
2,080
Reputation

4,179

Reaction score
2,045
Trophy points
1,393
Activity points

39,761


Yes, something similar I’ve read at a forum but my professor says that we have to use 14,1 version because this is the version we have in our labs

Show the error to your professor — get him to provide technical support for you.
If he tells you its a problem with your code — find a new professor.

  • #11

Newbie level 4

Joined
Oct 4, 2016
Messages
6
Helped
0
Reputation

0

Reaction score
0
Trophy points
1
Activity points

53


Here you have:

Started : «Simulate Behavioral Model».

Determining files marked for global include in the design…
Running fuse…
Command Line: fuse -intstyle ise -incremental -o {C:/Users/C95-MS/Xilinx/ISE workspace/Practica1A/tb_sumador_isim_beh.exe} -prj {C:/Users/C95-MS/Xilinx/ISE workspace/Practica1A/tb_sumador_beh.prj} work.tb_sumador {}
Running: C:Xilinx14.1ISE_DSISEbinntunwrappedfuse.exe -intstyle ise -incremental -o C:/Users/C95-MS/Xilinx/ISE workspace/Practica1A/tb_sumador_isim_beh.exe -prj C:/Users/C95-MS/Xilinx/ISE workspace/Practica1A/tb_sumador_beh.prj work.tb_sumador
ISim P.15xf (signature 0x2f00eba5)
Number of CPUs detected in this system: 4
Turning on mult-threading, number of parallel sub-compilation jobs: 8
Determining compilation order of HDL files
Parsing VHDL file «C:/Users/C95-MS/Xilinx/ISE workspace/Practica1A/Sumador.vhd» into library work
Parsing VHDL file «C:/Users/C95-MS/Xilinx/ISE workspace/Practica1A/testbench1A.vhd» into library work
Starting static elaboration
Completed static elaboration
Fuse Memory Usage: 156728 KB
Fuse CPU Usage: 281 ms
Compiling package standard
Compiling package std_logic_1164
Compiling package numeric_std
Compiling package textio
Compiling architecture rtl of entity sumador [sumador_default]
Compiling architecture beh of entity tb_sumador
Time Resolution for simulation is 1ps.
Waiting for 1 sub-compilation(s) to finish…
ERROR:Simulator:861 — Failed to link the design

Process «Simulate Behavioral Model» failed

— — — Updated — — —

Practica1A is the name of the project.

  • #12

How about trying to disable -incremental and deleting the work directory that contains the compiled code. You might be experiencing a problem with an old complied file causing a problem. Start with a clean compile of the code.

But I think you are more likely running into the incompatibility problems with ISE and Win8/10 the collect2 fix probably no longer works with win 10. From the link it appears reading through it that the only people who have had any success running fuse on a win8 machine are those that are using a 64-bit version of the OS and are using the 64-bit version of ISE. Are you on a 32-bit version of win10 (a win7 upgrade)?

I really think you should just either dual boot (a pain) or just install a VM of one of the supported Linux versions and allocate as much RAM as possible to the VM (hopefully you have a 12GB machine, out of luck with a VM if you are on win10 32-bit) and run it in a VM with at least 4GB of memory. As long as you aren’t using a huge V6 part then you should be fine with 4GB as all the webpack parts are small enough to not require more than 4GB of memory, I’m leaving the OS with 8GB because I’m not so sure that win10 will run well with less than 8GB, my 16GB machine runs with at least 6GB used from boot up.

Status
Not open for further replies.

Similar threads

  • instantiation error in Xilinx IP CORE

    • Started by Andreh12
    • Jun 11, 2022
    • Replies: 7

  • FlyingDutch

  • 10533 VHDL wait statement error

    • Started by Ngised
    • May 11, 2022
    • Replies: 6

  • Digital Design and Embedded Programming

  • PLD, SPLD, GAL, CPLD, FPGA Design

  • This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
     

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом — просто выделите ошибочное слово или фразу и нажмите Shift Enter.

FAQ Печать

Добавил(а) microsin

  

В этой статье приведены решения различных проблем, возникающих при создании программируемой логики на микросхемах Xilinx (CPLD, FPGA).

Стандартный способ ответвления от шины — подключение к шине отводов с помощью кнопки «Add Bus Tap»:

ISE WebPack ECS Add Bus Tap button

После этого от отвода рисуется проводник цепи, и присваивается ему подходящее по смыслу имя (потому что по умолчанию цепям автоматически назначаются бессмысленные имена на основе автоматической нумерации цепей, наподобие XLXI_137, и т. п.). Присвоение нужного имени осуществляется кнопкой Add Net Name:

ISE WebPack ECS Add Net Name button

Имя назначается для подключенной к отводу цепи таким образом, чтобы обозначить нужный проводник в шине. К примеру, у нас есть шина Q(7:0), это шина из 8 сигнальных проводников. Цепь каждого проводника шины Q в отдельности именуется как Q(7), Q(6), .., Q(0). Поэтому если нужно подключить отвод от шины к определенной цепи шины, то нужно проводнику этого отвода дать соответствующее имя. Например, если нужно подключиться к проводнику Q(5) шины, то на выходе из отвода нужно дать имя цепи Q(5).

ISE WebPack ECS Add Net Name example

Следует помнить, если Вы делаете подключение к части шины входов (не ко всем её проводникам), то на не подключенные входные разряды шины будет автоматически подан сигнал лог. 0.

[Соединение друг с другом двух шин]

Если шины имеют одинаковую разрядность, то никакой проблемы нет — просто надо нарисовать линию связи от начала шины до её конца.

ISE WebPack ECS connect busses

Но как быть, если надо соединить друг с другом не все сигналы шины, а только их части? Попытка это выполнить с помощью обычных отводов и присваивания имен цепей их проводникам (как было показано выше) приведет к конфликту имен, потому что соединяемые шины имеют разные имена.

ISE WebPack ECS connect partial busses wrong

В этом случае поможет простой библиотечный элемент BUF (находится в категории Buffers). Это псевдоэлемент, предоставляющий только логическую связь, но зато он позволяет иметь на входе и выходе разные имена цепей. С его помощью можно соединить части шин:

ISE WebPack ECS connect partial busses OK

При самых обычных действиях — при попытке добавления в проект файла *.ucf, при компиляции проекта среда _pn.exe завершается по ошибке «_pn.exe has stopped working». У меня так происходило в 64-битной Windows 8.1 для одного языка.

Причина в глючности 64-битной версии. Решение состоит в том, чтобы запускать 32-битную версию. Для этого исправьте свойства ярлычков, которые запускают Project Navigator. 64-битная версия запускается со следующей командной строкой:

X:ISE14.4ISE_DSsettings64.bat X:ISE14.4ISE_DSISEbinnt64ise.exe

Исправьте путь запуска на 32-битную версию так:

X:ISE14.4ISE_DSsettings32.bat X:ISE14.4ISE_DSISEbinntise.exe

run 32bit ISE WebPack

При синтезе дизайна VHDL в WebPACK происходит ошибка:

ERROR: (VHP__0808). имямодуля.vhd строка. + can not have such operands in this context
EXEWRAP detected a return code of '1' from program 'xst'
EXEWRAP complete - 0 errors, 0 warnings.
Done: failed with exit code: 0001.

Решение: если в коде VHDL используются любые арифметические операнды, то подключите для этого соответствующие пакеты IEEE, unsigned или signed (зависимости от типа используемых операндов).

use ieee.std_logic_unsigned.all;

или

use ieee.std_logic_signed.all;
ERROR:Simulator:904 - Unable to remove previous simulation file
 isim/имяфайла_isim_beh.exe.sim/имяфайла_isim_beh.exe. Please
 check if you have another instance of this simulation running
 on your system, terminate it and then recompile your design.
 System Error Message: boost::filesystem::remove: 
 "isimимяфайла_isim_beh.exe.simимяфайла_isim_beh.exe"
 
ERROR:Simulator:861 - Failed to link the design

Причина в том, что симулятор iSIM уже запущен, и система по какой-то причине не может удалить файл предыдущей симуляции. Чтобы исправить ошибку, нужно закрыть iSIM, после этого заново запустить симуляцию. Если это не помогает, то выполните Project -> Cleanup Project Files…, и опять запустите симуляцию.

Пример отладки простейшего кода счетчика в симуляторе. Выходы COUNT счетчика не меняются, хотя дизайн компилируется без ошибок и даже работает в железе.

ISim show output XXXX

Здесь символы ‘X’ справа от выходной шины COUNT показывают неизвестное значение (Forcing Unknown). Причина в том, что симулятор не знает начального значения регистра счетчика, который попадает на выходы COUNT. Вот код счетчика (Verilog), который не работал в симуляторе (красным шрифтом показана строка, где нужно выполнить инициализацию регистра):

module top(
    input XTALIN,
    output [3:0] COUNT
    );
 
reg [3:0] counter;
 
always @(posedge XTALIN)begin
   counter = counter + 1;
end
 
assign COUNT = counter;
 
endmodule

Исправление ошибки:

Теперь симулятор правильно показывает изменения выхода COUNT:

ISim show output OK

Пример кода VHDL (генератор буквы «Ж» кода Морзе):

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
 
entity top is
    Port ( XTALOUT1 : out  STD_LOGIC;
           XTALOUT2 : out  STD_LOGIC;
           XTALIN   : in  STD_LOGIC;
           MORSE    : out  STD_LOGIC);
end top;
 
architecture Behavioral of top is
constant v : unsigned ( 15 downto 0 ) := "1010101110000000";
signal clk : STD_LOGIC;
signal COUNT : unsigned (3 downto 0) := "0000";
 
begin
   -- Кварцевый генератор:
   clk <= not XTALIN;
   XTALOUT1 <= clk;
   XTALOUT2 <= not clk;
 
   -- Счетчик, по которому должны выбираться биты из константы v:
   process (clk) begin
   if clk'event and clk='1' then
      COUNT <= COUNT - 1;
   end if;
   end process;
 
   MORSE <= v(COUNT);
 
end Behavioral;

Строка, выделенная красным цветом, выдаст ошибку «ERROR:HDLParsers:821 — «имямодуля.vhd» строка. Wrong index type for v.». Здесь была сделана попытка применить вектор COUNT в качестве индекса.

Исправление ошибки:

   MORSE <= v(to_integer(COUNT));

1ns означает шкалу времени для симулятора, а 1ps означает точность учета времени для него. Единицы времени, указанные здесь, применяются при создании тестовых сигналов, подаваемых на вход тестируемой в симуляторе схемы. Например:

#1;       // Эта строка означает задержку в 1 нс
#0.001;   // Задержка 0.001 нс - минимальная, которая может быть
          // с настройкой шкалы "`timescale 1ns/1ps"
#0.0001;  // С этой шкалой времени задержка получится 0 нс!

Переключите дизайн в режим симуляции:

ISE WebPack change iSim simulation time1

В разделе Processes разверните пункт ISim Simulator, щелкните правой кнопкой мыши на пункт Simulate Behavioral Model и выберите в контекстном меню Process Properties…

ISE WebPack change iSim simulation time2

Измените настройку Simulation Run Time (по умолчанию там стоит время симуляции 1000 нс), кликните OK.

ISE WebPack change iSim simulation time3

Чем больше время симуляции, тем дольше будет вычисляться симуляция. Не устанавливайте здесь время больше 1 секунды (1000000000ns).

Простейшую вроде бы схему Fitter не может разместить на кристалле, и выдает ошибку наподобие:

ERROR:Cpld:887 - Cannot fit the design into this device.
ERROR:Cpld:868 - Cannot fit the design into any of the specified devices with
   the selected implementation options.

Причина скорее всего в том, что в Вашем файле ограничений дизайна (*.ucf) определены не все входы и выходы проекта. Для таких выходов система синтеза присваивает этим выходам свойства по умолчанию, которые настроены в проекте. В таком случае, если тип выхода выводов, которые назначены в файле UCF, не совпадают с типом выводов по умолчанию, и у фиттера не получится растасовать выводы разного типа по разным банкам I/O, то произойдет именно такая ошибка.

Как решить проблему? Есть как минимум 3 варианта, выберите любой по вкусу:

1. Можно в файле UCF корректно определить ВСЕ входы и выходы.
2. Можно вообще удалить файл UCF, тогда система сама назначит свойства выводов в соответствии с настройками по умолчанию проекта.
3. Поменять настройки по умолчанию проекта так, чтобы они соответствовали назначенным в файле UCF атрибутам выводов кристалла.

По умолчанию при создании для проекта шаблона модуля тестовых сигналов (File -> New Source… -> Verilog Test Fixture) в нем содержатся только определения для отображения только внешних портов схемы. При попытке добавить в блок Unit Under Test (UUT) внутреннего сигнала ISim при запуске выдаст ошибку:

ISim launch error show internal signal

При этом в файл лога isim.log будет записано примерно следующее:

ERROR: "имямодуля.vhd" строка n.  On entity block stimulus/uut/: attempted to connect to
 Port имявнутреннегосигнала which does not exist.ERROR: Time resolution is 1 fs
# onerror resume
# wave add /
No active Database
# run 1000000000 ns
Unable to execute live simulation command.

Как все-таки добиться просмотра в симуляторе любого внутреннего сигнала проекта? Можно конечно создать для этого сигнала порт out, и назначить его свободному выводу микросхемы.

Однако есть и более простой способ вручную отобразить вывод сигнала в симуляторе ISim. Для этого сделайте следующее:

1. Перейдите в ISim на закладку Instances and Processes. Если она почему-то не показывается, то это можно включить через меню View -> Panels. 

ISim show internal signal1

2. Кликните на треугольничек возле имени файла Velilog, в котором подготовлены сигналы для симуляции (в примере на скриншоте это stimulus.v). В развернутом дереве Вы увидите объект uut, кликните на него, чтобы выделить.

3. Перейдите на закладку Objects. Здесь Вы увидите все внутренние сигналы проекта.

ISim show internal signal4

4. Найдите в списке интересующий Вас сигнал. Например, нас интересует сигнал lfclk. Выберите его в списке, и нажмите комбинацию клавиш Ctrl+W (или кликните на нем правой кнопкой мыши и выберите в контекстном меню Add To Wave Window).

ISim show internal signal5

5. Запустите пересчет симуляции через меню Simulation -> Restart (или Ctrl+Shift+F5), и затем Simulation -> Run All (F5). Теперь на диаграмме будет показан новый внутренний сигнал lfclk, который мы выбрали.

ISim show internal signal6

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

[VHDL]

· Со строгим контролем типов
· Более подробный
· Высокая однозначность описания логики (детерминистический)
· Синтаксис и стиль мышления сильно отличается от языка C

[Verilog]

· Со слабым контролем типов
· Более краткий
· Детерминистический только в том случае, если Вы тщательно следуете некоторым правилам
· Больше похож на язык C

Ошибки Вы можете найти позже при симуляции проекта потому что от них никто не застрахован ни при использовании VHDL, ни при использовании Verilog (как и любого другого языка).

Также Verilog предпочитают использовать для конечной проверки логики проекта (в частности, на Verilog по умолчанию создаются шаблоны тестовых сигналов для симулятора ISim Xilinx), и в настоящее время все больше и больше разработчики переходят на язык SystemVerilog (фактически это очень значительное расширение Verilog).

Начиная с версии ISE 11.1, Xilinx больше не поддерживает Test Bench Waveform Editor. Когда проект, в котором есть test bench waveform (TBW), обновляется до версии 11.1, то TBW будет автоматически преобразован в HDL test bench, и добавлен в проект. Xilinx рекомендует для новых проектов использовать тесты (HDL test benches), написанные на основе HDL. Для дополнительной информации о создании HDL test bench см.:

• ISE Language Templates for starter examples site:xilinx.com
• Application Note XAPP199, Writing Efficient Test Benches site:xilinx.com
• Synthesis and Simulation Design Guide site:xilinx.com

Хорошее, простое руководство на Youtube:

• Creating a Simple VHDL Testbench site:youtube.com

Симулятор ISim предоставляет Test Bench Waveform Editor, в котором Вы можете графически определять тесты (test benches или (test fixtures). В Test Bench Waveform (TBW) Вы можете определить сигнал (stimulus) и длину теста (test bench length), чтобы проверить свой дизайн без необходимости знания HDL или скриптового языка. Определяемый Вами TBW можно добавить в проект ISE. Затем Вы можете использовать этот TBW для управления симуляцией своего дизайна точно так же, как используется для этой цели HDL test bench.

В любой момент времени Вы можете просмотреть HDL эквивалент своей формы сигнала (waveform), используя в среде ISE функцию View Generated Test Bench as HDL process.

При просмотре и определении TBW в редакторе Test Bench Waveform Editor редактирование осуществляется в исходном коде HDL source code. Это редактирование включает переименование портов, добавление и удаление сигналов, что будет отражаться на графическом отображении сигнала (graphic test bench waveform).  COREGen For more information, see Modifying Ports.

Оператора #1 на Verilog не существует. Есть оператор #, который имеет много разных смыслов, в зависимости от контекста использования. Обычно # используется для представления задержки для выражения, значение которой указывается после #. И опять-таки, нужно знать контекст, чтобы определить единицы задержки, так как 1 может означать 1 наносекунду, 1 микросекунду или что-то еще.

У Verilog есть несколько абстракций, разработанных для быстрой симуляции. Одна из них это простая модель сигналов 0/1/X/Z (+strength), другая это разрешающая способность тактов, которая указывается в начале файлов, например:

`timescale 1ns/1ps   // 1ns представляет опорное время, и 1ps это значение точности

В этом контексте «#1» это шаг во времени опорной тактовой частоты — использование малых целочисленных значений упрощает планирование событий (event scheduling), и потребляет меньше памяти. Тогда #1 станет соответствовать 1000 «тикам», если 1ps это самая большая точность, видимая в дизайне — что может быть сохранено в 16 битах (число short).

«#0» может использоваться для проталкивания текущего потока обратно к текущему слоту времени, что также известно как задержка «delta».

Примечание: VHDL для задержек использует высокоточное время в формате с плавающей точкой (double размером 64 бита).

#1 показывает задержки в Verilog для модели. #1 обычно используется для моделирования комбинационных задержек и задержек триггера.

Например, если я хочу моделировать задержку выхода D-триггера, то должен написать следующий код Verilog:

`timescale 1ns/100ps
 
reg q;   // выход триггера
wire d;  // вход триггера
 
// Моделирование D-триггера на Verilog
always @(posedge clk)  begin
   q <= #2 d;     // модель задержки clk->q 2ns на базе шкалы времени
end

Еще пример:

input ld;
reg ld_r;
always @(posedge clk) ld_r <= #1 ld;

Выражение always @(posedge clk) соответствует триггеру, но что тут делает #1? Ответ: ничего. Эти задержки будут игнорироваться системой синтеза, так что если Вы используете этот код в рабочем проекте, то есть некий риск, что он будет в нем работать не так, как в симуляторе.

Первое, что нужно понимать — язык C это язык программирования, а Verilog и VHDL это языки описания аппаратуры (Hardware Description Language, HDL). Это фундаментальные отличия между этими двумя типами языков.

Языки программирования используют для написания последовательности кода, который может быть выполнен на какой-то аппаратуре, чтобы получить нужные результаты, например математические операции, редактирование текста и т. п. С другой стороны, HDL-языки используются для создания полного функционального описания какой-либо аппаратуры, например блока арифметических операций (arithmetic logic unit, ALU), микроконтроллера (MCU) или даже микропроцессора (CPU)! Имеются специальные инструменты автоматизации разработки электроники, используемые для трансляции HDL-описания в реальный аппаратный компонент, реализованный в кремнии. На этом аппаратном компоненте Вы могли бы даже выполнить программу, написанную на C. Удивительно, не правда ли?

Вернемся к вопросу по алгоритмам DSP. На самом деле мы используем для них как C, так и Verilog/VHDL, однако их использование очень специфично для конкретного приложения.

Некоторые операции / алгоритмы часто используются в DSP, это такие операции, как конволюция, преобразование Фурье и т. п. Для их разработки мы используем специальные аппаратные блоки, и в результате получаем такие примитивы, как кольцевые буферы, ALU, модули быстрого преобразования Фурье БПФ (Fast Fourier Transform, FFT), массивы регистров и т. д. Эти блоки присутствуют внутри специализированных коммерческих процессоров DSP, имеющихся на рынке.

Предположим, что необходимо извлечь низкочастотный разговор их записанных выборок аудиосигнала. Звучит просто. Вам просто нужно разработать ФНЧ. Как Вы это кодируете? Конечно же на языке C. Вы также можете использовать любой другой язык программирования, однако C всегда самый популярный выбор. Затем Вы можете использовать компилятор, чтобы преобразовать программу на C в машинный код, который потом можно запустить на выбранном процессоре DSP. По сути Вам не нужно беспокоиться о том, что происходит внутри процессора. В процессоре уже имеются встроенный узлы ALU и FFT, которые заботятся о низкоуровневых операциях, и компилятор имеет для них встроенную поддержку. Реализации в программном обеспечении дает Вам дополнительную гибкость. Можно в любой момент поменять код C и запустить его на том же самом оборудовании. С другой стороны, если была выбрана реализация того же самого алгоритма с помощью HDL и логики, то нужно выпустить на заводе другой чип кроме случая, когда система реализована в FPGA.

Теперь немного о том, как это работает. Стандартные, часто используемые в DSP аппаратные блоки пишутся на HDL и реализуются в кремнии. Все сложные алгоритмы DSP реализуются на языке программирования, и запускаются на этих аппаратных компонентах. Алгоритмы DSP запускаются на процессорах DSP, и мы используем язык C для работы на более высоком уровне абстракции, чтобы преобразовать код в ассемблер, и запустить его на процессоре DSP. Следовательно, DSP-процессор и есть эта самая аппаратура, которую можно было бы реализовать на HDL-языке, и алгоритм представлен в программе, которая работает на этой аппаратуре.

Мы используем Verilog или VHDL для описания и разработки аппаратуры, которая будет размещена либо в специальной микросхеме (Application Specific Integrated Circuit, ASIC), или запрограммирована в кристалл FPGA, чтобы сконфигурировать его для требуемой аппаратуры.

Если нужно запустить DSP-алгоритм на определенном DSP-процессоре, то мы пишем для него специальную программу, реализующую нужный алгоритм, после чего запускаем эту программу на DSP-процессоре.

Если нам нужно создать новую схему, которая должна поддерживать какой-то отдельный алгоритм DSP, то используем для разработки FPGA или ASIC.

Итак, на практике ЛЮБОЙ алгоритм может быть как написан на C, так и реализован в виде схемы на уровне RTL с помощью HDL-языков описания аппаратуры. Перед разработчиком стоит задача выбора реализации — что реализовать в программе, а что в аппаратуре. C и HDL это просто инструменты в форме языков, и их соответствующие компиляторы преобразуют код этих языков соответственно в последовательно выполняемый код и работающую аппаратуру. Выбор между аппаратной и программной реализацией диктуется многими факторами и метриками, такими как требуемая скорость обработки (аппаратно реализуемая схема на FPGA вероятно будет иметь меньшую задержку и большую пропускную способность по сравнению с процессором DSP), отношение производительность / потребление энергии, форм-фактор устройства (память для набора инструкций процессора, такого как DSP или микроконтроллер, обычно меньше, чем память для хранения соответствующей конфигурации логики в большинстве FPGA), цена (FPGA обычно дороже), требования к обработке в реальном времени, требования по энергопотреблению, необходимое время вывода продукта на рынок (разработка на FPGA занимает больше времени), стоимость разработки (FPGA сложнее программировать), стоимость поддержки, исправления багов, удобство обновления прошивки и т. д. Также имеют значение опыт и предпочтения разработчика. О каждом из этих факторов стоит подумать, прежде чем принять решение о конкретной реализации — будет ли она реализована программно, аппаратно, или же это будет гибридный проект (FPGA + DSP).

Обычно говорят, что если Вы изучили один язык программирования, то скорее всего довольно легко изучите другой язык программирования. Причина тут в том, что все языки программирования используют единую концепцию (принцип работы), различия между ними только в синтаксисе.

У разработчика аппаратуры предметная область знаний коренным образом отличается. Если Вы не прекратите думать как программист C, то жизнь в качестве программиста VHDL сведет Вас с ума. Причина тут не только в разнице синтаксиса, но еще и в том, что концепция этих языков совершенно различна. Оба отличаются друг от друга по базовому принципу работы, а общие их черты поначалу будут вводить большую путаницу.

Ниже представлены базовые отличия между программированием на C и программированием на VHDL (то же самое можно сказать о Verilog и любом другом HDL-языке).

1. Язык C это язык «среднего» уровня, т. е. он занимает некое промежуточное положение между языком ассемблера и языком высокого уровня. На языке C можно добиться довольно точного (но не с абсолютной точностью) заданного поведения программы, если не в реальном времени, то в контексте выполнения какого-либо алгоритма.

2. VHDL это язык описания аппаратуры (hardware description language, HDL). Он используется для реализации аппаратной схемы.

3. C может обрабатывать инструкции только последовательно, каждая выполняется во времени строго перед завершением предыдущей. В действительности язык C не имеет никаких встроенных средств по управлению/анализу реального времени.

4. VHDL позволяет реализовать как последовательное выполнение каких-то действий, так и параллельное, конкурентное. HDL-язык позволяет очень точно управлять ресурсами логики в контексте реального времени.

5. Программа C может быть успешно написана только в контексте чисто логических или алгоритмических действий. Обычно не требуется глубоких знаний аппаратуры, на которой выполняется программа (из этого есть исключения, зависящие от приложения, в целом только подтверждающие правило).

6. Для успешного программирования на VHDL требуются знания аппаратуры проектируемых схем. Разработка требует предварительного предсказания, как определенный код будет реализован на имеющейся аппаратуре, и требуется разводка логических сигналов на выводы программируемого чипа, с учетом стандартов уровней логики, нагрузочной способности и других особенностей аппаратуры.

7. При программировании на C обычно не задумываются о ресурсах (имеется в виду процессорное время и память). Причина в том, что обычно программа на C (после обработки компилятором) запускается на мощном процессоре под управлением операционной системы. Имеется достаточный запас по как по вычислительным ресурсам, так и по ресурсам памяти (конечно, из этого тоже есть исключения, когда проектируется система реального времени с помощью микроконтроллера или процессора DSP).

8. Когда разработка осуществляется на VHDL, Вы сталкиваетесь с большими ограничениями по ресурсам. Память и количество других логических элементов ограничена плотностью (емкостью) FPGA (это чип, для которого пишется прошивка на VHDL), причем ресурсы FPGA довольно дороги. По этой причине очень трудно, к примеру, реализовать обработку изображения на VHDL, чем сделать то же самое на C.

9. Разработка на VHDL требует выполнения дополнительных шагов по проверке реализации работы кода — сначала в виде симуляции, а потом и на реальной аппаратуре. Это требует специальных итераций в разработке, что занимает больше времени, поэтому разработка на VHDL обходится дороже.

[Ссылки]

1. В чем разница между VHDL, Verilog и SystemVerilog?

ISE14.7 Проблема совместимости Основные моменты

Шестое, предупреждение: Воздействие: 923 — не может найти кабель, проверьте настроек кабеля!

Эта ошибка заключается в том, что водитель не установлен или водитель имеет проблемы, и общее ISE автоматически устанавливает драйвер при установке, но есть некоторые компьютеры Win10 или Win8, чтобы иметь проблемы, или не обращайте внимания на драйвер установки во время установки. Решение следующее: найдите этот каталог привода C, затем нажмите на приложение MAP, просто установите его!

ISE14.7 Проблема установки водителя

Откройте диспетчер устройств Win10 для расширения универсального контроллера последовательного шины.

Если ваш диск проблематично, Digileient USB-устройство имеет восклицательный знак. Необходимо переустановить драйвер, щелкните правой кнопкой мыши, выберите «Обновить драйверы».

Выберите, чтобы просмотреть мой компьютер, чтобы найти программное обеспечение драйвера

Нажмите, чтобы просмотреть

Драйверы DigileNT находятся в файлах C: Program (x86) Digileient Runtime Usbdriver.

Выберите этот каталог установки и нажмите «Далее», чтобы установить его.

Если он все еще неудачно после установки, то можно сказать, что система не может быть решена, и она не может быть решена по общей попытке. Рекомендуется перезагрузить систему.

5. ISE14.7 PIN-код ограничения Planahead не открывается нормально

Когда вы запускаете 64-битный проектный навигатор (например, для PIN-программы ввода / вывода), 64-битный проект Navigator Flanhead’s Flanching Planahead не открывается, что только отображает экран запуска, но не открывается.
Чтобы решить его, мы должны заставить Planahead всегда работать в 32-битном режиме.

  • Открыть c: xilinx 14.7 Ise_ds planahead bin и переименовать rdiargs.bat rdiargs.bat.orig
  • Загрузите включенный ZIP-файл
  • Извлеките его, вы должны иметь файл под названием rdiargs.bat
  • Скопируйте новый файл rdiargs.bat в c: xilinx 14.7 ise_ds planahead bin

Привязанность ссылки: http://pan.baidu.com/s/1gepvuph

Один, О Win8.Win10.Не совместимость решения

(Win7 не имеет проблем с воспосами, вы можете использовать его непосредственно в соответствии с процессом установки)

В каталоге установки я есть d: ise_14.7 14.7 ise_ds ise lib nt64, чтобы найти две папки в двух папках, где оригинальная libportability.dll переименована libportibity_bac. Dll, переименовать оригинальную libportabilitynosh.dll libportability.dll, вы можете решить это.

Во-вторых, установка программного обеспечения завершена после лицензииЗабудьте добавить решения

Откройте ISE14.7, как показано ниже

Откройте программное обеспечение, нажмите Управление лицензией

Нажмите Load лицензию

Найдите место, где у вас есть лицензия, от лицензии, которая загружается из установочного пакета, где запомнить путь.

Я здесь уже загружал лицензию, поэтому она отображается, перезаписывается.

Pophang Этот интерфейс, как правило, загрузка лицензии.

После первой нагрузки такая картина появилась, она была успешно загружена.

три,  Лицензия после установки программного обеспеченияЗабыл добавить, управлять лицензиейНе могу открыть

· Мы знаем, множество программных программ, несовместимых с Win8 / Win8.1, не совместим с помощью управления окном «Файл просмотра», который проявляется как: Нажмите на кнопку, аналогичную «Обзор», будет мигать или «XXX Stop) Работа «К сожалению, XILINX ISE устанавливается в Win8 / Win8.1, но менеджер лицензий имеет вышеупомянутые воспоминания.

Решение:

1. Вручную построить папку под названием «.xilinx» в корневом каталоге диска C (с помощью командной строки: MD C: . Xilinx);

2. Поместите «xilinx_ise.lic» в папку RECKER в установочном пакете (этот файл также можно найти онлайн) CPOY к этой папке;

3. Откройте руководитель лицензий; (если вы все еще не можете открыть его, не используйте его напрямую)

Четыре, исимуляторПроблема симуляции

error:simulator861 – Failed to link the design

Поскольку совместимость ISE, версия Windows 8, может иметь эту проблему, то есть симулятор не может открыть, решение выглядит следующим образом:

Найти каталог установки

Xilinx 14.x ise_ds nt gnu mingw 5.0 nt libexec gcc mingw32 3.4.2 gcc mingw32 3.4.2 collect2.exe «и удалите его, повторно запустите эмулятор, проблема решена!

2. Проблема, как показано ниже

Это связано с тем, что настройки эмулятора ISE неверны,

Дважды щелкните, как показано выше

Измените столбец симулятора в Isim, это эмулятор вызова.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Error should be within a nested template argument list
  • Error ts2451 cannot redeclare block scoped variable
  • Error too many requests перевод
  • Error shift chara
  • Error timeout postman

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии