标签: xilinx-ise

VHDL中的类型转换:实数到整数 - 是否指定了舍入模式?

在调试Vivado中用户定义的物理类型的处理时(更多内容),我发现了从真实到整数的类型转换的不同行为.

这是我的示例代码:

library IEEE;
use     IEEE.STD_LOGIC_1164.ALL;
--use     IEEE.MATH_REAL.all;

entity Top_PhysicalTest_Simple is
  port (
    Clock : in STD_LOGIC;
    Input : in STD_LOGIC;
    Output : out STD_LOGIC
  );
end;

architecture top of Top_PhysicalTest_Simple is
  constant int_1     : INTEGER  := natural(0.5);
  constant int_2     : INTEGER  := integer(-0.5);
--  constant int_2     : INTEGER  := natural(-0.5);
begin
  assert FALSE report "16 - int_1 (natural(0.5)):  " & INTEGER'image(int_1) severity note;
  assert FALSE report "17 - int_2 (natural(-0.5)): " & INTEGER'image(int_2) severity note;

  Output <= …
Run Code Online (Sandbox Code Playgroud)

type-conversion vhdl xilinx xilinx-ise vivado

6
推荐指数
1
解决办法
1万
查看次数

警告:未安装 VC++ 2008 运行时库。赛灵思

我将 Xilinx 的 ISE 安装到我的 Windows PC 上,结果非常糟糕。它不起作用,因为当我尝试运行它时,出现下一条消息显然Warning: VC++ 2008 runtime libraries are not installed. Please install the runtime libraries by running the redistributable {Install Root Dir}\common\bin\nt64\vcredist_x64.exe from the installed area. You will need to have adminstrative privilege to run VC++ 2008 Redistributable. 我进入了目录,以管理身份运行,修复了 C++ 库,但没有任何变化,它仍然无法打开。

xilinx xilinx-ise

6
推荐指数
0
解决办法
4097
查看次数

在VHDL中创建低时钟频率的替代方法

在过去,我问了一个关于复位的问题,以及如何将高时钟频率分解为一系列较低时钟的方波频率,其中每个输出是彼此的谐波,例如第一个输出是10 Hz,第二个是20 Hz等等

我收到了几个非常有用的答案,建议使用时钟使能引脚创建较低频率的惯例.

我发生了另一种选择; 使用不断递增的位数,并将该数字的最后x位作为时钟输出,其中x是输出的数量.

它在我的综合中起作用 - 但我很想知道 - 因为我从未在网上或在SO上提到它,我错过了一些意味着它实际上是一个糟糕的想法,我只是为了以后创造问题?

我知道对此的限制是我只能产生输入频率除以2的幂的频率,所以大部分时间它只能接近所需的输出频率(但仍然是正确的)订购).这种限制是不推荐的唯一原因吗?

非常感谢!

大卫

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
library UNISIM;
use UNISIM.VComponents.all;
use IEEE.math_real.all;

ENTITY CLK_DIVIDER IS
    GENERIC(INPUT_FREQ : INTEGER;       --Can only divide the input frequency by a power a of 2 
            OUT1_FREQ  : INTEGER
    );
    PORT(SYSCLK  : IN  STD_LOGIC;
         RESET_N : IN  STD_LOGIC;
         OUT1    : OUT STD_LOGIC;       --Actual divider is  2^(ceiling[log2(input/freq)])
         OUT2    : OUT STD_LOGIC);      --Actual output is input over value above
END CLK_DIVIDER;

architecture …
Run Code Online (Sandbox Code Playgroud)

spartan conventions clock vhdl xilinx-ise

5
推荐指数
1
解决办法
928
查看次数

Xilinx TCL Shell在哪里发出结果?

我正在尝试围绕Xilinx ISE TCL Shell开发基于Python的包装器xtclsh.exe。如果可行,我将添加对其他Shell的支持,例如PlanAhead或Vivado ...

那么,总体情况如何?我有一个构成IP核心的VHDL源文件列表。我想打开一个现有的ISE项目,搜索丢失的VHDL文件,并在必要时添加它们。由于IP内核具有重叠的文件依赖关系,所以项目可能已经包含一些文件,因此我只在寻找丢失的文件。

示例用户Python 3.x和subprocess管道。将xtclsh.exe启动,并将命令逐行发送到外壳。监视输出结果。为了简化示例,我将STDERR重定向到STDOUT。虚拟输出POC_BOUNDARY插入命令流中,以指示已完成的命令。

可以通过设置示例ISE项目(包含一些VHDL源文件)来测试随附的示例代码。

我的问题是显示了INFO,WARNING和ERROR消息,但是脚本无法读取TCL命令的结果。

search *.vhdl -type file在xtclsh.exe中手动执行会导致:

% search *.vhdl -type file
D:/git/PoC/src/common/config.vhdl
D:/git/PoC/src/common/utils.vhdl
D:/git/PoC/src/common/vectors.vhdl
Run Code Online (Sandbox Code Playgroud)

执行脚本会导致:

....
press ENTER for the next step
sending 'search *.vhdl -type file'
stdoutLine='POC_BOUNDARY
'
output consumed until boundary string
....
Run Code Online (Sandbox Code Playgroud)

问题:

  • xtclsh写入哪里?
  • 如何从TCL命令读取结果?

顺便说一句:提示符号%对我的脚本也不可见。


Python代码重现此行为:

import subprocess

class XilinxTCLShellProcess(object):
  # executable = "sortnet_BitonicSort_tb.exe"
  executable = r"C:\Xilinx\14.7\ISE_DS\ISE\bin\nt64\xtclsh.exe"
  boundarString = "POC_BOUNDARY"
  boundarCommand = bytearray("puts {0}\n".format(boundarString), "ascii")

  def create(self, …
Run Code Online (Sandbox Code Playgroud)

python shell subprocess xilinx xilinx-ise

5
推荐指数
1
解决办法
797
查看次数

在 Verilog 中验证参数

我创建了一个模块,它接受一个指定模块数据线字节宽度的参数。它看起来像:

module wrapper#
(
    parameter DATA_BYTE_WIDTH = 1
)
( 
    din, dout, ..
);
    localparam DATA_BIT_WIDTH = 8*DATA_BYTE_WIDTH;
    input [DATA_BIT_WIDTH-1:0] din;
    output [DATA_BIT_WIDTH-1:0] dout;
    .....
    generate
        if( DATA_BYTE_WIDTH == 1 ) begin
            // Various modules and interconnects for 1-byte data
        else if( DATA_BYTE_WIDTH == 2) begin
            // Various modules and interconnects for 2-byte data
        else if....
            // and so on, for 4, 8, and 16
        else 
           // DATA_BYTE_WIDTH is not a valid value
           // HERE is where I want to …
Run Code Online (Sandbox Code Playgroud)

verilog hdl xilinx-ise

5
推荐指数
1
解决办法
3735
查看次数

如何在 VHDL 中初始化 std_logic_vector?

我有一个 std_logic_vector(4096 downto 0) 信号,我想像下面这样初始化它:

architecture Behavioral of test is

    type ram_type is array(4095 downto 0) of std_logic_vector(15 downto 0);
    signal ram : ram_type;
    ram(0) := "0010000000000100";   
    ram(1) := "0001000000000101";
    ram(2) := "0011000000000110";
    ram(3) := "0111000000000001";
    ram(4) := "0000000000001100";
    ram(5) := "0000000000000011";
    ram(6) := "0000000000000000";
    ram(4095 downto 7) := (others => (others => '0'));
    begin
   "some code"
end behavioral
Run Code Online (Sandbox Code Playgroud)

由于某种原因,我需要用这些值初始化它(我无法将这些值分配给它,它必须被初始化)是否有任何方法可以做到这一点?我尝试了上面的代码,但它不起作用

vhdl hdl xilinx-ise

3
推荐指数
1
解决办法
1万
查看次数

将STD_LOGIC连接到一位STD_LOGIC_VECTOR

我正在使用Xilinx ISE,并使用CORE Generator和Architecture Wizard生成了内存。

问题在于它创建了一个写使能信号(wea)作为STD_LOGIC_VECTOR(0到0),并导致类型不匹配:

第###行:encnt附近类型错误;当前类型为std_logic; 预期的类型std_logic_vector

如何将encntstd_logic转换为一点std_logic_vector?

(ISE不允许我从内存文件中更改Wea。)

casting vhdl xilinx-ise

2
推荐指数
1
解决办法
3219
查看次数

使用BUFG来驱动时钟负载

我正在尝试处理输出到DVI芯片的像素数据.使用各种时钟频率是因为DVI芯片寄存器是使用I2C编程的(因此需要时钟<500 KHz) - 来自时钟分频器.

DVI芯片需要一个40 MHz的差分像素时钟,然而,DVI每半个显示半个字节,因此每半个周期需要另外80 MHz的时钟将每一半像素推到数据线上,这些都是来自DCM.

这导致了各种各样的问题.我试图只使用双像素时钟速率交换像素的每一半,但是我得到了错误:

This design contains a global buffer instance, <out2_bufg>, driving the net, <pxlclk_p_int>, that is driving the following (first 30) non-clock load pins.

所以我在DCM的输出和使用信号的组件之间添加了一个BUFG元素 - 但它没有改变任何东西,而是现在在BUFG的输入和输出上抛出两次错误.

  • 我怎么能解决这个问题 - 因为我刚刚添加了一个BUFG并且它不喜欢它!

我的代码如下; 我试图删除与时钟无关的不相关的东西,但它仍然很长!

编辑1:我添加了块,当添加到系统时,导致错误(之前没有)它在第二个代码块中!我目前正在研究差分信号的其他建议,并在完成后再次编辑!

非常感谢,

大卫

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.VComponents.all;

ENTITY I2CBus IS
    PORT(
        SYSCLK_N   : IN    STD_LOGIC;   --system 200MHz differential clock
        SYSCLK_P   : IN    STD_LOGIC;
        BTN        : IN    STD_LOGIC;   -- to manually change reset

        LED        : OUT   STD_LOGIC_VECTOR(3 …
Run Code Online (Sandbox Code Playgroud)

buffer spartan clock vhdl xilinx-ise

2
推荐指数
1
解决办法
5108
查看次数

敏感列表错误

我想计算数组元素的总和。阵列的元素在每个时钟上升沿(按顺序)分配。我不想在下一个时钟上升沿得到元素的总和,所以总和的设计必须是组合的。我可以在没有任何错误的情况下获得正确的仿真结果,但是我的代码没有在 ISE(Xilinx 合成工具)中合成。我正在研究 Spartan3。

我的代码:

always @* begin
    sum = 0;
    for (i=0; i<K; i=i+1)
        sum = sum + shiftReg[i];    
end
Run Code Online (Sandbox Code Playgroud)

错误

Xst:902 - 始终阻止敏感列表中出现意外的 shiftReg 事件。

我搜索了解决方案。一种方法是添加shiftReg敏感列表中的所有元素,但在我的项目中,元素的数量是K(K是一个参数)。

verilog xilinx-ise

2
推荐指数
1
解决办法
1947
查看次数