在调试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) 我将 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++ 库,但没有任何变化,它仍然无法打开。
在过去,我问了一个关于复位的问题,以及如何将高时钟频率分解为一系列较低时钟的方波频率,其中每个输出是彼此的谐波,例如第一个输出是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) 我正在尝试围绕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)
问题:
顺便说一句:提示符号%对我的脚本也不可见。
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) 我创建了一个模块,它接受一个指定模块数据线字节宽度的参数。它看起来像:
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) 我有一个 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)
由于某种原因,我需要用这些值初始化它(我无法将这些值分配给它,它必须被初始化)是否有任何方法可以做到这一点?我尝试了上面的代码,但它不起作用
我正在使用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。)
我正在尝试处理输出到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的输入和输出上抛出两次错误.
我的代码如下; 我试图删除与时钟无关的不相关的东西,但它仍然很长!
编辑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) 我想计算数组元素的总和。阵列的元素在每个时钟上升沿(按顺序)分配。我不想在下一个时钟上升沿得到元素的总和,所以总和的设计必须是组合的。我可以在没有任何错误的情况下获得正确的仿真结果,但是我的代码没有在 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是一个参数)。
xilinx-ise ×9
vhdl ×5
xilinx ×3
clock ×2
hdl ×2
spartan ×2
verilog ×2
buffer ×1
casting ×1
conventions ×1
python ×1
shell ×1
subprocess ×1
vivado ×1