我可以在类似于C-源代码,宏VHDL东西使用__DATE__
,并__TIME__
借此让该编译时在FPGA作为一种版本的时间戳的?
作为一个>>> new-cmer <<< to VHDL我想修改以下现有代码,它将硬编码日期放入FPGA寄存器.我总是要记住在编译之前调整值.如果这是自动完成的话会更容易.我还可以包括小时/分钟/秒吗?
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY Datum2 IS
PORT
(
Day :OUT std_logic_vector(4 downto 0);
Month :OUT std_logic_vector(3 downto 0);
Year :OUT std_logic_vector(4 downto 0)
);
END Datum2 ;
ARCHITECTURE rtl OF Datum2 IS
BEGIN
-- "08.08.0013"
Day <= conv_std_logic_vector(8, 5);
Month <= conv_std_logic_vector(8, 4);
Year <= conv_std_logic_vector(13, 5);
END ARCHITECTURE rtl;
Run Code Online (Sandbox Code Playgroud) 在模拟中,这是完美的.这是检查可合成代码的零的最佳方法.会产生什么资源?
signal vector_slv : std_logic_vector(2048 downto 0);
...
if (vector_slv = (vector_slv'range => '0')) then
-- do something...
Run Code Online (Sandbox Code Playgroud)
考虑到h/w映射(具有最佳资源利用率),是否有任何其他最佳方式来实现此解决方案.
我会更了解所使用的资源.
最初的问题是:
VHDL中有哪些非常有用但却深奥的语言功能,你实际上可以用来做有用的工作?
原来的问题被删除了,我只是在回答.我认为这是一个有趣的问题,特别是当您将VHDL与其他(普通)编程语言进行比较时.
免责声明:我在VHDL中只做了一些简单的例子.
但是,与其他编程语言相比,我特别喜欢它(这可能不是你所要求的,但我认为只是对于这些事情,每个程序员都应该知道一点VHDL):
能够拥有单个界面的多种不同实现(体系结构),并轻松交换它们.
语言模型固有的低开销并行性.它让我想起了数据流语言.
更新组合过程很容易,忘记更新灵敏度列表.在Verilog中,引入了@(*)来表示灵敏度列表是在此过程中使用的.VHDL中有等价的吗?
VHDL配置可用于将组件绑定到具有不同名称的实体,甚至可以使用完全不同的端口.[查看此文章了解更多信息]
configuration c2 of testbench is
for str
for dut_inst : dut
use entity work.unrelated(rtl)
port map(
port1 => a,
port2 => b,
port3 => c,
port4 => "unused"
);
end for;
end for;
end configuration c2;
Run Code Online (Sandbox Code Playgroud)
你们有没有见过这种商业项目项目?放弃一个看似无关的实体的目的是什么?为什么他们不只是改变实例化代码?
我可以弥补假设情况,但我对现实生活中的用例很感兴趣.
目前,我正在学习一些使用VHDL的FPGA设计技术,我的问题是我们是否可以在VHDL中使用:=和<=可互换,尽管我已经看到在常量声明中使用:=和<=在赋值中?提前致谢!
我正在尝试创建一个可重复使用的桶形移位器; 它需要一个输入的位数组并将它们移位一定数量的位置(由另一个输入确定).我想参数化模块,以便它适用于任何模块n
.
所需的选择行数由n
- > 确定,即SHIFT_CNT = log2(NUMBITS-1)+1
在下面的代码中.它被认为是不好的形式在我的组织(我认为整体的)有不属于港口std_logic_vector
或std_logic
,所以我用一个std_logic_vector
用于选择线的数量.我需要调整std_logic_vector
基于输入泛型的长度.有没有办法在不使用第二个通用的情况下执行此操作?我看过这篇文章,但它没有涉及泛型.这篇文章完全消除了泛型或使用日志值作为泛型,这对于未来的用户来说并不直观(如果INPUT
不是2的幂,可能会导致问题).
以下声明SHIFT_CNT
绝对不正确; 有没有办法在不使用第二个通用的情况下自动生成实体声明中的长度?
entity BarrelShifter is
generic ( NUMBITS : integer :=8);
Port ( INPUT : in std_logic_vector (NUMBITS-1 downto 0);
OUTPUT : out std_logic_vector (NUMBITS-1 downto 0);
SHIFT_CNT : in std_logic_vector ((NUMBITS-1)'length downto 0)
);
end BarrelShifter;
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个快速的方式做81号的部分排序 - 理想的情况下我期待提取最低16个值(它不是必需的16是在绝对正确的顺序).
这样做的目标是在FPGA专用硬件 - 所以这个稍微复杂的问题,因为我想要的结果执行的面积尽可能小.我看了看,并实施了奇偶合并排序算法,但我的理想在寻找什么,可能是我的需求更有效的(贸易算法实现大小的部分排序,以便给予最低16,不一定而不是一个完整的)
任何建议都会非常受欢迎
非常感谢
我正在准备考试,通过一些旧的考试.其中一个问题是:
编写实现图中同步FSM的可综合行为VHDL代码... FSM有一个输入,称为请求,具有值(r1,r2,r3)的枚举类型...
这让我想写这段代码:
entity fsm is
port ( clk : in std_logic;
request : in my_enum_type
);
end fsm;
Run Code Online (Sandbox Code Playgroud)
某处有一个:
type my_enum_type is (r1, r2, r3);
Run Code Online (Sandbox Code Playgroud)
在某个地方(我已经尝试了正确的端口声明和建筑声明之后).
但我似乎无法让它发挥作用.我可以将自定义类型作为输入或输出吗?
好像我已经做了很多次,但由于某种原因,今天它只是不想工作.
我想将16位向量的MSB分配给单位变量.
Din : in STD_LOGIC_VECTOR (15 downto 0);
...
signal signBit : std_logic;
begin
signBit <= Din(15 downto 15);
Run Code Online (Sandbox Code Playgroud)
给出的错误是:
Type of signBit is incompatible with type of Din.
Run Code Online (Sandbox Code Playgroud)
是的,我得到它,向量与std_logic不一致,但这是1位,清楚地表示为(15 downto 15)