我正在学习VHDL,我正在尝试从示例,语法指南和实验中学习.
有一点我不太明白为什么你想要提供多个架构.例如,这个示例MUX代码:
architecture behv1 of Mux is
begin
process(I3,I2,I1,I0,S)
begin
-- use case statement
case S is
when "00" => O <= I0;
when "01" => O <= I1;
when "10" => O <= I2;
when "11" => O <= I3;
when others => O <= "ZZZ";
end case;
end process;
end behv1;
architecture behv2 of Mux is
begin
-- use when.. else statement
O <= I0 when S="00" else
I1 when S="01" else
I2 when S="10" else …Run Code Online (Sandbox Code Playgroud) 我试图定义一个复杂的类型(即,一个由实部和虚部组成的类型),并试图找到一种方法使其成为通用的.
This my current static code:
type complex_vector is record
Re : signed(15 downto 0);
Im : signed(15 downto 0);
end record;
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否有办法使这个通用,换句话说就像:
type complex_vector (Generic: Integer := WIDTH) is record
Re : signed(WIDTH downto 0);
Im : signed(WIDTH downto 0);
end record;
Run Code Online (Sandbox Code Playgroud)
我试图谷歌寻求解决方案以及浏览我的书籍,但我找不到任何解决方案.真的没有吗?没有记录,就可以做出类似这样的事情:
type blaaa is array (NATURAL range <>) of STD_LOGIC;
Run Code Online (Sandbox Code Playgroud)
感谢您的任何意见
编辑:
或者我可以做以下的事情吗?
type complex_primitives is (re, im);
type complex_vector is array (re to im) of signed(natural range <>);
Run Code Online (Sandbox Code Playgroud)
编译器抱怨但..
我是Eclipse的新手,我已经将它用于软件开发,而在Altra环境中用于Nios处理器.但是现在,我有一个非常大的项目,我必须管理,我想使用Eclipse来拥有系统中的所有文件,以便更容易管理和更新.
该项目有多个目录用于各种IP,并具有ASCI,Xilinx和Altera FPGA的多个目标.在不久的将来,该项目将支持NIOS,Microblaze和ARM处理器,如果可能的话,我真的希望将整个项目保存在一个Eclipse项目文件中.我尝试了几种不同的选择,但似乎没有什么工作正常.
我正在寻找一些免费软件,而不是像Sigasi这样的商业程序.
提前谢谢,法哈德
这是让其他人了解我的进展的更新.
好吧,我终于设法让它发挥作用.
花了一些时间来解决这个问题,但它现在完美无缺.
我想知道VHDL中是否定义了整数溢出.我无法在2002规范中找到任何内容.
作为一个例子(注意,这可能无法编译,它只是一个通用的例子......):
entity foo is port (
clk : std_logic
);
end entity;
architecture rtl of foo is
signal x : integer range 0 to 2 := 0;
begin
process (clk)
begin
if rising_edge(clk) then
x <= x + 1;
end if;
end process;
end architecture;
Run Code Online (Sandbox Code Playgroud)
很明显,x它将从0变为1,然后变为2.是否定义了下一个增量会发生什么?是不确定的行为?
我正在使用设计编译器来合成我的设计,并与另一个设计进行比较(作为我报告中的评估).Synopsys的工具可以轻松地通过命令报告该区域,但在所有论文中,我都读到了关于门数的关注.
我的测验是什么是门数以及如何计算它?
我用谷歌搜索并听说门数计算为total_area/NAND2_area.那么,这是真的吗?
感谢您的阅读,请不要怪我愚蠢的问题:(.
我需要声明计数器要在2D数组中采用的值.另外,我如何从数组中选择元素并使用它们(比如将它们分配给另一个变量)如何声明这个2D数组的元素?
type lutable is array (0 to 4, 0 to 63) of integer range 0 to 4000;
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Terasic的一些书籍和Altera DE1开发套件来学习VHDL编程.
这里的问题是我正在尝试编程一个VGA控制器,分辨率为640x480(虽然我的屏幕是一台1280x1024的TFT LCD).
我在使用代码时遇到了一些问题.
我使用FSM来制作垂直和水平信号,另一个块用于驱动RGB输入,还有一个来自DE1的27 MHz时钟.
我认为代码有问题,因为我在屏幕上打印的图像尺寸不正确(640x480)但更大(约1174x980).
到现在为止,我试图在屏幕上放一个唯一的颜色来简化它,直到我发现错误.
我的项目有3个文件,1个用于块RGB,1个用于FSM,另一个用于实例化它们.
我会很感激某种帮助来解决这个问题,因为我已经努力想出来,但我看不出错误在哪里.
非常感谢!
奥马尔
VGA控制器文件
library ieee;
use ieee.std_logic_1164.all;
entity VGA_controller is
port(clk, reset : in std_logic;
Hsync,Vsync : out std_logic;
R,G,B : out std_logic_vector(3 downto 0));
end entity;
architecture arch of VGA_controller is
component FSM_sync is
port(clk,reset : in std_logic;
Hsync,Vsync,VIDON : out std_logic;
Vcount,Hcount : out integer range 0 to 799);
end component;
component VGA_display is
port(hcount,vcount : in integer range 0 to 799;
r,g,b : out std_logic_vector(3 downto …Run Code Online (Sandbox Code Playgroud) 关于如何在VHDL中编码有限状态机(FSM)似乎存在很多争议.人们谈论1流程,2流程或3流程FSM,好像每个人都知道它的含义以及每个流程的作用.但是,我一直无法找到准确的定义,而且存在的例子似乎是矛盾的.
这是一个客观问题:每个FSM风格(1个流程,2个流程,3个流程)的代码有何不同?我知道有一个个人偏好的组成部分,但当然可以客观地回答这个问题并列出每种方法的优点.
谢谢,
我应该在VHDL中创建一个具有可变数量的输入和输出的实体.这个引脚数应该从GENERIC结构中给出.我们假设有这样的代码:
entity HELLO is
GENERIC(NUM_INPUT: integer:=4;
NUM_OUTPUT: integer:=2
);
port(
input1 : in std_logic_vector(31 downto 0);
input2 : in std_logic_vector(31 downto 0);
input3 : in std_logic_vector(31 downto 0);
input4 : in std_logic_vector(31 downto 0);
out1 : out std_logic_vector(31 downto 0);
out2 : out std_logic_vector(31 downto 0)
);
end entity HELLO;
Run Code Online (Sandbox Code Playgroud)
显然,手动编写它们(如上例所示)会使GENERIC构造无效.
我希望这4个输入和2个输出根据GENERIC信息自动生成.怎么做?