Vhdl 简单状态机问题

我有一个非常简单的FSM,它应该驱动外部RAM的一些输出信号。我遇到的问题是如何处理数据总线 可以是输入也可以是输出。。。我不太确定我该怎么处理 在我的FSM中,这是最好的例子。问题来自以下行: v.sram_data <= io_sram_data; v.sram\u数据 v、 sram_数据:=“00000000”; v、 sram_地址:=“0000”; v、 sram_rd:=“0”; v、 sram_wr:=“0”; v、 状态:=wr_数据; 当wr_数据=> io_

Vhdl 无符号逻辑,向量和加法-如何?

我正在创建一个程序计数器,它应该只使用无符号数字 我有两个标准逻辑向量和两个标准逻辑向量。我需要做些什么,以便他们只使用unsigned?目前我只有库; 使用IEEE.STD_LOGIC_1164.ALL 在某些条件下,我还需要将其中一个二进制向量增加1(正如您现在可能已经猜到的)。考虑到其中一个向量的输出是32位的,请您解释一下如何执行这些操作(使用无符号和相加) 我猜(我试过)输出简而言之,您可以将ieee.numeric\u std包添加到您的体系结构中(库ieee;使用ieee.nume

Vhdl 如何创建大于2³的数字标准符号值¹-1.

在下面的类型和常量声明中,数组中的最后一个值实际上不是2**35-1,因为大于2**31-1的整数不是标准的VHDL(2002) ieee库; 使用ieee.numeric_std.all; --删除样板。。。 恒定X_尺寸:自然:=40;——真的,任何大于32的东西 类型x_数组是有符号的数组(自然范围); 常量XS:x_数组=( 到_签名(0,X_大小), 至_签名(1,X_尺寸), 要签名(2**35-1,X_大小)--不可能! ); 我不能对有符号(2,X_大小)**35-1执行,因为

VHDL-设置传感器的采样率

各位SO用户: 我试图以5Hz的频率(每秒5个样本)对电阻式湿度传感器进行采样。我正在使用ADC读取输出。现在,我被告知,您可以在任何频率下运行ADC,但您需要使用5hz时钟来启动转换并从ADC读取值 PROCESS (CLK_5HZ, RST) BEGIN IF (RST = '1') THEN Y <= (OTHERS => '0'); ELSIF (CLK_5HZ'EVENT AND CLK_5HZ = '1') THEN IF

Vhdl 如何比较整数和标准逻辑向量

我有一系列信号。当作为“选择器”的信号等于单元数时,我想写入数组中相应的单元。为了节省写入和代码行,我在generate循环中生成赋值: read_data_signals_gen: for i in 0 to (CAU_num -1) generate v_direction_sig(i)(0) <= DATA_IN when (chosen_flow_sig = i) and (read_state = st_read_v_direction_0) else

Vhdl 可以在端口声明中使用自定义类型吗?

我正在复习一些旧的考试,为考试做准备。其中一个问题是: 在图中编写实现同步FSM的可综合行为VHDL代码。。。 FSM有一个称为请求的输入,它是枚举类型,具有值(r1、r2、r3) 这让我想写以下代码: entity fsm is port ( clk : in std_logic; request : in my_enum_type ); end fsm; 在某个地方有一个: type my_enum_type is (r1, r2, r3); 某处(

Vhdl 测试台有助于使一个时钟周期延迟

有人能帮我写一个测试台吗 输入“a”时,设置加载=1 等待1个时钟周期(即时钟的时间段) 设置load=0并输入a=00000 我不知道如何使1个时钟周期延迟。您可以尝试这样做: SIGNAL CLKp :time := 40 ns; PROCESS BEGIN CLK <= '0'; wait for CLKp/2; CLK <= '1'; wait for CLKp/2; END PROCESS; PROCESS BEGIN load <=

Vhdl 如何使用Modelsim SE模拟Altera megafunction

___大家好。我使用Quartus II中的Megawizard实例化了一个PLL。然后我想用ModelSim SE模拟它,因为Quartus II 10.1没有内置的模拟器。我将builtinpl.vhd(Megawizard的输出)和PLL_tb.vhd(testbench)复制到ModelSim项目的目录中。但当我编译builtinpl.vhd时,它给出了以下错误消息: 错误:builtinpl.vhd(39):找不到库altera\u mf。 错误:内置vhd(40):(vcom-113

无法使用handel-c和VHDL通过VGA显示静态图像

您好,我在使用handel-c显示静态图像时遇到问题。请通过DE2-115 VGA创建测试图案 由于某种原因,我无法将图像输出到监视器 这是我的tpad.hcc代码: #include "tpad.hch" macro proc lcd_driver( lcd ) { unsigned 24 colour; unsigned 1 de; interface bus_out() tpad_RGB( unsigned 24 clr = colour ) //Post pin for RG

带引脚分配的Quartus vhdl错误

我总是能够在不分配pin分配的情况下编译我的项目。但是,现在我正在实例化项目目录中的某些文件,我收到了以下错误: 错误(35032):分区“Top”上的输出端口“pre\u syn.bp.CPU\u address\u 0\u”必须驱动顶级pin,但正在驱动“” 我已经做了研究,但找不到解决这个错误的方法,因为我甚至还没有在IOT得到完整编译之前分配过PIN码。 有人知道这个错误是什么意思吗?我如何跟踪它?(夸特斯帮不了什么忙)谢谢 您是否使用任何altera IP核,如Qsys组件?他们可能需

在VHDL中实现寄存器时,是否必须编写'else'语句

为了在进程外实现寄存器,我以以下方式使用when语句: registered_sig <= (others => '0') when (RESET = '1') else data_sig when (read_data = '1') and (rising_edge(CLK)) else registered_sig; registered_sig“0”)何时(重置='1')其他 当(读取数据='1')和(上

Vhdl 使用integer';将整数转换为字符串时出错;形象

我的VHDL代码有问题。函数integer的映像无法正常工作。在项目的顶部,我将一个实体(region_engine)称为两个“generate”,代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_misc.all; use ieee.numeric_std.all; use std.t

VHDL中的变量乘法

好了,伙计们,我的实验任务需要这个。在项目的一部分,我必须这样做: M*(2^E),其中M是M2 M1 M0 3位数字,E是E1 E0 2位数字 我知道我们在与2相乘时在数字的末尾加零,但数字“E”不是常数 我只是想知道怎么做 语言:VHDL *我不允许使用“行为”架构 谢谢大家! 我不会给你一个完整的解决方案,因为它会破坏实验室的目的 你知道,当乘以2时,在数字的末尾加一个零,我相信你也可以计算出当E1E0从0变为3时要加多少个零。由于只有4个案例,因此很容易列出所有案例: with e se

Vhdl 1位宽内存阵列

我正在使用ISE14.7,我正在尝试用一些1位宽的分布式RAM块来创建设计 我的记忆宣言: type tyMemory is array (0 to MEMORY_NUM - 1) of std_logic_vector(MEMORY_SIZE - 1 downto 0) ; signal Memory: tyMemory := ( others => (others => '0')) ; attribute ram_style : string ; attribute ram_st

Vhdl 7段显示和启用之间的计时

我在Altera大学实验室工作,但我使用的是设计稍有不同的电路板,因此我必须模仿实验室中使用的电路板显示7段LED的方式 我已经用下面的代码进行了分类: LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY DE1_disp IS PORT ( HEX0, HEX1, HEX2, HEX3: IN STD_LOGIC_VECTOR(6 DOWNTO 0); clk : IN STD_LOGIC;

VHDL脚本语法错误

我有这个代码,我想做一个LSFR,但我有几个问题,包括: 错误:HDLParsers:3010-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第18行。实体LFSR不存在。 错误:HDLParsers:3312-“C:/Users/user/Documents/tp_vhdl/media_LSFR/LSFR.vhd”第19行。未定义符号“标准逻辑向量”。 错误:HDLParsers:1209-“C:/Users/user/Documen

用VHDL将泛型传递给包

我正在尝试实现一个通用(可参数化)矩阵加法器 到目前为止,我只有两个3x3矩阵的矩阵加法器。下面是matrix_的补充: LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.std_logic_UNSIGNED.all; USE ieee.numeric_std.all; LIBRARY work; USE work.matrix_pack.all; ENTITY matrix_a

VHDL:在一个进程中启用多个时钟

您好,我是VHDL新手,我想问一下这样的过程是否可以 在一个进程中有多个时钟 C256Hz和C4Hz是由50MHz时钟驱动的时钟启用 process (Reset, C50Mhz, Go, start_flag, C256Hz, C4Hz) begin if reset = '1' then start_flag <= '0'; elsif rising_edge (C50Mhz) then if C4Hz = '1' then if cou

如何使用VHDL为具有n个选择行的1到2^n输出解复用设置实体?

我正在处理一项任务,使用2^n个输出和n个选择行进行解复用。我有一个我的输入(x位宽,在本例中x是32位)和我的使能引脚。但我不知道如何设置实体,使我的输出为2^n,有n个选择行。到目前为止,我的实体声明如下所示: -- Entity declaration entity DEMUX is -- Get the size of an integer generic(Len :integer); -- Map input, output, selection and enable signal p

Vhdl错误10344不知道该怎么办

我试图设置并加载d触发器代码(synch),但它一直给我计数输入d是标准逻辑,所以'0'&d是2位向量。Count是长度为9的std_逻辑_向量,所以不能这样赋值。 我不完全确定你想达到什么目的。如果要将“0”和“d”分配给向量的某个部分,可以编写示例 count(1 downto 0) <= '0' & d 计数(1到0)输入d是标准逻辑,因此'0'&d是2位向量。Count是长度为9的std_逻辑_向量,所以不能这样赋值。 我不完全确定你想达到什么目的。如果要将“0”和“d”

如何在VHDL测试台上方便地对信号进行分组和驱动

假设我有3个控制信号A,B和C 在testbench中,VHDL中有一个函数可以将其分组并快速迭代所有案例(例如,使它们能够使用for循环进行迭代),而不是写出8个案例 Psuedo代码示例: for i in range 0 to 7 grouped_signals <=std_logic_vector(to_unsigned(i,3) 0到7范围内的i的 分组信号它可以是一个信号分配,其中目标是一个集合: library ieee; use ieee.std_logic_1164.

Vhdl virtex 6 FPGA中Dsp片的Preg复位

这里是VHDL代码,我使用了DSP作为MACC单元(乘法累加),使用了语言模板中可用的原语。在每7个时钟周期中,我重置Preg,当我重置Preg时,该周期的倍增输出丢失。如何重置Preg而不丢失任何数据 我附上了输出波形的截图 ---------------------------------代码--------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; library UNISIM;

VHDL:将大向量与值进行比较并赋值

我想比较一个32位的向量。e、 g 位向量:在标准逻辑向量中(0到31); ... 如果(位向量/=零),则……——这里我想检查它是否为零 用什么来代替“零”“呢?有紧凑的格式吗 我想我们会写如果(位向量/=x'0')不确定 请解释一下如何在这里检查?如果我想给任何其他信号分配一些初始值,那么方法是什么。e、 g 一些信号:标准逻辑向量(0到31):=???——我想知道除“00000000 11000000101010100000000”以外的选项 谢谢,干杯 Tahir问题的第一部分可以这样写

Vhdl 为什么第56-61行出现错误?

我试图在实验室为状态机设置一个问题,并且在尝试用Quartus编译时不断收到错误 我尝试过使用逗号和else语句,但似乎没有任何效果 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.All; ENTITY SM_VHDL IS -- Do not modify this entity statement! PORT(X : IN STD_LOGIC_VECTOR(1 DOWNTO 0); RESETN, CLOCK

VHDL:天花板和地板除以两个整数常量

在VHDL中,我正在寻找一种方法来获取一个实体的两个整数参数,将其中一个除以另一个作为浮点数,然后找到这个浮点数比率的下限和上限,然后将其存储为VHDL整数常量 library ieee; use ieee.std_logic_1164.all; entity something is generic( N: natural := 4; M: natural := 150 ); port( sys_clk

当递增或递减时,VHDL整数在整个位置上计数

我已经编写了一个简单的VHDL时钟门控进程,它包含两个变量,一个整数递增(counter_up)和一个整数递减(counter_down),每个变量都绑定到一个LED输出 该测试系统的目标是,只要计数器从设定的起始值达到目标值,就可以断言输出。计数器在10时启动,并在20时输出其LED。计数器向下从25开始,并在5输出其LED。这些将分别继续计数和过流/欠流。两个计数器的范围为0到31(5位) 当我使用模拟时钟在modelsim上进行测试时,会出现“到处计数”的情况,如下所示: 计数器分别在1

Vhdl 多输出FPGA LUT

我正在设计mandelbrot查看器,我正在设计用于平方值的硬件。我的平方器是递归构建的,其中4位平方器依赖于2,2位平方器。对于我的16位平方器,它有2个8位的平方器,每个都有2个4位的平方器 正如您所见,递归性开始使设计变得复杂起来。为了加快我的设计速度,我想使用模拟4位平方器的4输入ROM。所以当你在rom中输入3时,它输出9,当你输入15时,它输出225 我知道在逻辑单元ay中实现的普通LUT有3或4个输入变量,只有1个输出,但我需要8位输出,所以我需要更多的ROM,而不是LUT 非常感

VHDL如何同时使用floor和log2

在下面的代码中,如果N等于127或128,我总是得到BitLength=7和BitLength2=6。有人能解释一下吗 constant N : integer := 128; constant N_LOG2 : real := log2(real(N)); signal BitLength : integer := integer(N_LOG2); signal BitLength2 : integer := integer(floor(N_LOG2)); 我希望BitLength始终等于B

VHDL数组类型大小写处理 让我们考虑下面的(忽略当前的合成):

我知道这是一种非常好的做法,即为每个潜在的“有效”值sig1(“0000”、“0001”、“0010”、…、“1111”)设置一个条件,因为其他检查将包括“U”、“X”和“Z”。因此,这个良好的实践告诉我们,上面的示例不是很好的VHDL代码 现在让我们考虑下面(保持头脑中的合成): 状态3和状态4将采取相同的操作。其他国家的意图是对国家2和5采取同样的行动 是否仍然“需要”执行类似于下面的操作 when state2 | state5 => do something when others

Vhdl 将std_逻辑位按升序存储到大型阵列中

我有一个2048位的数组,我想存储 从0到2047的输入位在每个时钟周期上升沿的FPGA中按升序排列 例如: 阵列[0]桶形移位器 如果在加载2048完成之前不需要访问数据,那么在verilog中,您可以暗示一个桶移位器。每个时钟周期,数据向下移动1个位置。在2048位结束时,所有东西都将位于正确的位置 reg [2048-1:0] arr; always @( posedge clk or negedge rst_n) begin if (~rst_n) begin arr &l

Vhdl 为什么有必要使用内部信号进行处理?

我从根本上学习VHDL,除了这个,一切都很好。我在网上找到的。这是左移位寄存器的代码 library ieee; use ieee.std_logic_1164.all; entity lsr_4 is port(CLK, RESET, SI : in std_logic; Q : out std_logic_vector(3 downto 0); SO : out std_logic); end lsr_4;

这两个vhdl代码之间有什么区别

这两个vhdl代码之间的区别是什么 首先: library IEEE; use IEEE.Std_Logic_1164.all; entity mux4 is port( in1, in2, in3, in4 : in std_logic; ctrl: in std_logic_vector(1 downto 0); sai: out std_logic ); end mux4; architecture mux_bhv of mux4 is begin pr

Vhdl 为什么不能在verilog中合成延迟?

我一直读到RTL代码中声明的延迟永远无法合成。它们仅用于模拟目的,现代合成工具将忽略代码中的延迟声明 例如:x=#10y将被视为x=y由合成工具生成 有人能解释一下为什么不能合成任何硬件描述语言(即VHDL、Verilog或Sytem Verilog)中的延迟声明的原因吗?在Verilog中,我们可以暗示改变时钟边缘值的逻辑,这将合成触发器。我们可以暗示非时钟布尔逻辑,它综合到组合逻辑,只是一堆and和OR 合成时钟树时,合成工具通过添加延迟来平衡这些,以便所有节点同时接收时钟,因此合成工具似乎

交通VHDL仿真问题

我已经更新了程序,它确实完成了,但现在我正在尝试模拟该项目。我可以把时钟弄清楚,把灯挂在别针上,但我不能让灯工作和计数,甚至连状态都没有显示出来。我相信我把这一切都安排好了,但我可能错了。再次感谢Morten Zimer对错误代码的帮助 这是对文件的模拟, 实体流量为 端口(时钟:在标准逻辑中; clr:标准逻辑中; 灯:断开标准逻辑向量(5到0); 终点交通; 交通的建筑交通是 类型状态_类型为(s0、s1、s2、s3、s4、s5); 信号状态:状态_型; 信号计数:标准逻辑向量(3到0)

如何测试用VHDL设计的UART接收器?

我一直在用vhdl设计UART 但是我如何测试它呢? 我已经用RM测试了发射机。也可以使用Tera术语发送数据吗?如果是,你能告诉我怎么做吗?这不是一个有用的答案,我试着输入了,但没有显示出来。我需要设置任何配置吗?你可以。暂时打开“本地回音”以查看您正在键入的内容。同时关闭可能会抑制传输的流量控制。你们有模拟器吗?在模拟器中使用一个测试台,将两个UART波形驱动到您的UART设计中。这将简化您查看哪些正确接收UART字,哪些不正确的能力。合成芯片并将其连接到硬件只有在您能够正确访问正常工作和不

vhdl中的有限状态机

对于一个项目,我正在做一个PWM多路复用器,但我的FSM没有成功。当我收到PWM_INT中断时,计数器应递增,如果达到最大值,则计数器应变为0。计数器取决于FSM的状态 这是我的实现: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Mux is Port ( CLK : in STD_LOGIC; RST : in STD_LOGIC; PWM : in ST

VHDL中寄存器的多次读取和封装导致错误值

我目前面临一个问题,读取两个寄存器并通过代理将其值发送到FPGA上的磁贴。编码信号有三个输入通道,由频率为50khz的脉冲组成,然后通过FPGA板上的本地100Mhz时钟对信号进行采样。在模块中,对两个通道的脉冲进行计数,我使用位移位进行封装,将两个计数器的读取值放入一个32位std_位_向量中,通过代理发送 若我只传输一个通道的计数值,并通过代理信号发送它们,那个么它的行为总是正确的。然而,当从两个寄存器读取两个计数值并进行封装时,移位值的16个高位总是以比预期更快的速度增加。换言之,计数过程

VHDL无法确定运算符“+”的定义

当我试图编译我的代码时,以下部分有一个错误: overflow <= input_a(15) + input_b(15); 因此,错误是: Error (10327): VHDL error at alu16.vhd(45): can't determine definition of operator ""+"" -- found 0 possible definitions 提前感谢如果您想执行算术运算,您应该声明有符号/无符号信号,而不是位向量/std逻辑向量 最后这些类型只能用

Vhdl 对FPGA片逻辑复用的影响

我是FPGA编程新手。在设计报告中,我注意到,与合成后的切片逻辑复用相比,路由后切片逻辑复用有所下降。有人能解释为什么吗?感谢合成后运行的映射做了许多事情,其中之一是在设计中用硬IP替换一些逻辑,并且它优化了信号恒定或未使用输出的设计。如果报告大小的差异很大,那么您应该查看报告文件,看看哪些信号/逻辑得到了优化,如果代码正常,那么这不会是问题,但是如果没有,那么您应该查看顶级连接和驱动器。

在VHDL中为数组部分赋值?

我有一个VHDL格式的数组 type CacheArray is array(0 to 15) of std_logic_vector(33 downto 0); signal cache_array: CacheArray := (others => (others => '0')); 我希望给这个数组赋值,这样每个索引只有一位被初始化。我怀疑这样的事情会起作用 cache_array(15 downto 0)(33) <= (others => '0'); 在某种

Vhdl 信号<;信号>;无法合成,同步描述错误

我正在尝试实现一个组件,该组件接收一个基本时钟的输入,并根据此方案输出一个模式: 我得到了这个错误,我尝试了很多方法来修复它,也遵循了stackoverflow的各种建议,但什么都没有 错误:Xst:827-“E:/Progetti/nuovi/Clock\u生成器/CG\u ex\u 3/Clock\u ex3.vhd”第34行:无法合成信号检查\u 0,同步描述错误。当前软件版本不支持用于描述同步元素(寄存器、内存等)的描述样式 有时,相同的错误指的是形式前时钟 IEEE库; 使用IEEE

如何在vhdl中将大整数转换为小整数?

我有VHDL代码,我试图乘以像素值。我拥有以下实体: entity xGradient is port( clk : in std_logic; x11, x12, x13, x21, x22, x23, x31, x32, x33 : in integer range 0 to 255; gradientInX : out integer range 0 to 255 ); end xGradient; 我对这些执行以下操作: gradientInX <=

时钟配置-VHDL编码Altera DE1音频编解码器芯片

我正在从事一个项目,需要在Altera DE1板上编码WM8731音频编解码器芯片。这个项目非常基础。它不需要处理输入的音频信号。来自输入端的信号应直接中继到输出端 主要任务是通过I2C协议设置编解码芯片。我是VHDL新手,在理解这个概念时遇到了一些问题 在使用之前,需要对编解码器芯片进行初始化。这包括通过I2C传递数据集。下面给出了要传递的数据以及说明 constant sdin_load : std_logic_vector (11*24-1 downto 0) --thi

返回vhdl中的无约束数组

在vhdl中返回无约束向量的最佳方法是什么 function func(selector : natural) return std_logic_vector is begin case selector is when 3 => return std_logic_vector("11"); when 4 => return std_logic_vector("101"); when others => return st

如何添加已在VHDL中串联的两个std_逻辑_向量?

我正在使用一组特定的函数处理ALU。我想,如果我使用一个额外的位来存储进位,那么加法和位移位部分就会容易得多。我试图将一个额外的位连接到两个8位长的“std_逻辑_向量”。额外的位将在加法中保持进位 然而,当我在一些调试之后运行模拟时,它看起来不像是我用来给s_a和s_b它们的值的行在做任何事情。如果我去掉默认值,它们就会变成空的 我确信这个错误是愚蠢的,我不太熟悉vhdl中的串联工作原理,也许有更好的方法来存储执行,如果有任何帮助,我们将不胜感激 代码: library IEEE; use I

Vhdl 我的波形中有一个时钟周期的信号错误

我有这个计划 我必须为它编写结构VHDL设计 这些是我的组成部分: 多路复用器: IEEE库; 使用IEEE.STD_LOGIC_1164.all; 实体多路复用器是 港口( A:标准逻辑向量(7到0); B:标准逻辑向量(7到0); Sel:以位表示; Z:输出标准逻辑向量(7到0) ); 端多路复用器; mux的架构是 开始 Z regB_out, Sel=>S1, Z=>mux1_res ); RegA:实体注册(Beh) 港口地图 ( LD=>LDA, C=>CLK, Reg_in=>

如何在VHDL中创建异步边缘检测器?

我不熟悉VHDL。我想创建一个异步工作的边缘检测器(不使用时钟信号) 我使用了一个简单的示意图: 在Quartus II(Altera/Intel)中,我有以下代码: ---- signal MyInput_Change : std_logic; ---- process (MyInput) begin MyInput_Change<= not(not (MyInput)) xor MyInput; --edge detector if ( MyInput_Change

Vhdl Modelsim上模拟时组件和实体的类型不匹配

我请求一些帮助,因为我完全陷入了VHDL项目。我所有的VHD文件编译时都没有任何错误,但当我想在Modelsim上模拟整个块时,我得到的是: # ** Fatal: (vsim-3807) Types do not match between component and entity for port "nibble1". # Time: 0 ps Iteration: 0 Instance: /myadder_vhd_vec_tst/i1 File: Adder.

  1    2   3   4   5   6  ... 下一页 最后一页 共 82 页