标签: Vhdl
fpgastate-machine
我有一个非常简单的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_
我正在创建一个程序计数器,它应该只使用无符号数字
我有两个标准逻辑向量和两个标准逻辑向量。我需要做些什么,以便他们只使用unsigned?目前我只有库;
使用IEEE.STD_LOGIC_1164.ALL
在某些条件下,我还需要将其中一个二进制向量增加1(正如您现在可能已经猜到的)。考虑到其中一个向量的输出是32位的,请您解释一下如何执行这些操作(使用无符号和相加)
我猜(我试过)输出简而言之,您可以将ieee.numeric\u std包添加到您的体系结构中(库ieee;使用ieee.nume
在下面的类型和常量声明中,数组中的最后一个值实际上不是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
sensorssamplingrateadc
各位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
我有一个组成部分:
Component CAU is
port
(
CLK : in std_logic;
RESET : in std_logic;
START : in std_logic;
V_DIRECTION : in vector_3d;
P_ORIGIN : in vector_3d;
我有一系列信号。当作为“选择器”的信号等于单元数时,我想写入数组中相应的单元。为了节省写入和代码行,我在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
我正在复习一些旧的考试,为考试做准备。其中一个问题是:
在图中编写实现同步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);
某处(
有人能帮我写一个测试台吗
输入“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 <=
___大家好。我使用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显示静态图像时遇到问题。请通过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
我总是能够在不分配pin分配的情况下编译我的项目。但是,现在我正在实例化项目目录中的某些文件,我收到了以下错误:
错误(35032):分区“Top”上的输出端口“pre\u syn.bp.CPU\u address\u 0\u”必须驱动顶级pin,但正在驱动“”
我已经做了研究,但找不到解决这个错误的方法,因为我甚至还没有在IOT得到完整编译之前分配过PIN码。
有人知道这个错误是什么意思吗?我如何跟踪它?(夸特斯帮不了什么忙)谢谢 您是否使用任何altera IP核,如Qsys组件?他们可能需
为了在进程外实现寄存器,我以以下方式使用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的映像无法正常工作。在项目的顶部,我将一个实体(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
multiplicationexponent
好了,伙计们,我的实验任务需要这个。在项目的一部分,我必须这样做:
M*(2^E),其中M是M2 M1 M0 3位数字,E是E1 E0 2位数字
我知道我们在与2相乘时在数字的末尾加零,但数字“E”不是常数
我只是想知道怎么做
语言:VHDL
*我不允许使用“行为”架构
谢谢大家! 我不会给你一个完整的解决方案,因为它会破坏实验室的目的
你知道,当乘以2时,在数字的末尾加一个零,我相信你也可以计算出当E1E0从0变为3时要加多少个零。由于只有4个案例,因此很容易列出所有案例:
with e se
我正在使用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
我在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;
我有这个代码,我想做一个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
我正在尝试实现一个通用(可参数化)矩阵加法器
到目前为止,我只有两个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新手,我想问一下这样的过程是否可以
在一个进程中有多个时钟
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
我正在处理一项任务,使用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
我试图设置并加载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”
假设我有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
signal-processingxilinx-ise
这里是VHDL代码,我使用了DSP作为MACC单元(乘法累加),使用了语言模板中可用的原语。在每7个时钟周期中,我重置Preg,当我重置Preg时,该周期的倍增输出丢失。如何重置Preg而不丢失任何数据
我附上了输出波形的截图
---------------------------------代码---------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
我想比较一个32位的向量。e、 g
位向量:在标准逻辑向量中(0到31);
...
如果(位向量/=零),则……——这里我想检查它是否为零
用什么来代替“零”“呢?有紧凑的格式吗
我想我们会写如果(位向量/=x'0')不确定
请解释一下如何在这里检查?如果我想给任何其他信号分配一些初始值,那么方法是什么。e、 g
一些信号:标准逻辑向量(0到31):=???——我想知道除“00000000 11000000101010100000000”以外的选项
谢谢,干杯
Tahir问题的第一部分可以这样写
我试图在实验室为状态机设置一个问题,并且在尝试用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测试台编写一个刺激读取器。它需要读取文本文件中由空格分隔的一个文本命令和两个文本操作数
entity tb is
end entity;
architecture sim is tb of
begin
process
variable L : line;
file STIMFILE : test is in "stim.txt";
variable s1 : string;
variable s2
在VHDL中,我正在寻找一种方法来获取一个实体的两个整数参数,将其中一个除以另一个作为浮点数,然后找到这个浮点数比率的下限和上限,然后将其存储为VHDL整数常量
library ieee;
use ieee.std_logic_1164.all;
entity something is
generic(
N: natural := 4;
M: natural := 150
);
port(
sys_clk
标签: Vhdl
fpgamodelsimquartus
我已经编写了一个简单的VHDL时钟门控进程,它包含两个变量,一个整数递增(counter_up)和一个整数递减(counter_down),每个变量都绑定到一个LED输出
该测试系统的目标是,只要计数器从设定的起始值达到目标值,就可以断言输出。计数器在10时启动,并在20时输出其LED。计数器向下从25开始,并在5输出其LED。这些将分别继续计数和过流/欠流。两个计数器的范围为0到31(5位)
当我使用模拟时钟在modelsim上进行测试时,会出现“到处计数”的情况,如下所示:
计数器分别在1
我正在设计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
非常感
在下面的代码中,如果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
我知道这是一种非常好的做法,即为每个潜在的“有效”值sig1(“0000”、“0001”、“0010”、…、“1111”)设置一个条件,因为其他检查将包括“U”、“X”和“Z”。因此,这个良好的实践告诉我们,上面的示例不是很好的VHDL代码
现在让我们考虑下面(保持头脑中的合成):
状态3和状态4将采取相同的操作。其他国家的意图是对国家2和5采取同样的行动
是否仍然“需要”执行类似于下面的操作
when state2 | state5 => do something
when others
我有一个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,除了这个,一切都很好。我在网上找到的。这是左移位寄存器的代码
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代码之间的区别是什么
首先:
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
我一直读到RTL代码中声明的延迟永远无法合成。它们仅用于模拟目的,现代合成工具将忽略代码中的延迟声明
例如:x=#10y将被视为x=y由合成工具生成
有人能解释一下为什么不能合成任何硬件描述语言(即VHDL、Verilog或Sytem Verilog)中的延迟声明的原因吗?在Verilog中,我们可以暗示改变时钟边缘值的逻辑,这将合成触发器。我们可以暗示非时钟布尔逻辑,它综合到组合逻辑,只是一堆and和OR
合成时钟树时,合成工具通过添加延迟来平衡这些,以便所有节点同时接收时钟,因此合成工具似乎
我已经更新了程序,它确实完成了,但现在我正在尝试模拟该项目。我可以把时钟弄清楚,把灯挂在别针上,但我不能让灯工作和计数,甚至连状态都没有显示出来。我相信我把这一切都安排好了,但我可能错了。再次感谢Morten Zimer对错误代码的帮助
这是对文件的模拟,
实体流量为
端口(时钟:在标准逻辑中;
clr:标准逻辑中;
灯:断开标准逻辑向量(5到0);
终点交通;
交通的建筑交通是
类型状态_类型为(s0、s1、s2、s3、s4、s5);
信号状态:状态_型;
信号计数:标准逻辑向量(3到0)
我一直在用vhdl设计UART
但是我如何测试它呢?
我已经用RM测试了发射机。也可以使用Tera术语发送数据吗?如果是,你能告诉我怎么做吗?这不是一个有用的答案,我试着输入了,但没有显示出来。我需要设置任何配置吗?你可以。暂时打开“本地回音”以查看您正在键入的内容。同时关闭可能会抑制传输的流量控制。你们有模拟器吗?在模拟器中使用一个测试台,将两个UART波形驱动到您的UART设计中。这将简化您查看哪些正确接收UART字,哪些不正确的能力。合成芯片并将其连接到硬件只有在您能够正确访问正常工作和不
对于一个项目,我正在做一个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
encapsulationmultiple-records
我目前面临一个问题,读取两个寄存器并通过代理将其值发送到FPGA上的磁贴。编码信号有三个输入通道,由频率为50khz的脉冲组成,然后通过FPGA板上的本地100Mhz时钟对信号进行采样。在模块中,对两个通道的脉冲进行计数,我使用位移位进行封装,将两个计数器的读取值放入一个32位std_位_向量中,通过代理发送
若我只传输一个通道的计数值,并通过代理信号发送它们,那个么它的行为总是正确的。然而,当从两个寄存器读取两个计数值并进行封装时,移位值的16个高位总是以比预期更快的速度增加。换言之,计数过程
当我试图编译我的代码时,以下部分有一个错误:
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
fpgahardware-programming
我是FPGA编程新手。在设计报告中,我注意到,与合成后的切片逻辑复用相比,路由后切片逻辑复用有所下降。有人能解释为什么吗?感谢合成后运行的映射做了许多事情,其中之一是在设计中用硬IP替换一些逻辑,并且它优化了信号恒定或未使用输出的设计。如果报告大小的差异很大,那么您应该查看报告文件,看看哪些信号/逻辑得到了优化,如果代码正常,那么这不会是问题,但是如果没有,那么您应该查看顶级连接和驱动器。
我有一个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');
在某种
我正在尝试实现一个组件,该组件接收一个基本时钟的输入,并根据此方案输出一个模式:
我得到了这个错误,我尝试了很多方法来修复它,也遵循了stackoverflow的各种建议,但什么都没有
错误:Xst:827-“E:/Progetti/nuovi/Clock\u生成器/CG\u ex\u 3/Clock\u ex3.vhd”第34行:无法合成信号检查\u 0,同步描述错误。当前软件版本不支持用于描述同步元素(寄存器、内存等)的描述样式
有时,相同的错误指的是形式前时钟
IEEE库;
使用IEEE
我有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 <=
我正在从事一个项目,需要在Altera DE1板上编码WM8731音频编解码器芯片。这个项目非常基础。它不需要处理输入的音频信号。来自输入端的信号应直接中继到输出端
主要任务是通过I2C协议设置编解码芯片。我是VHDL新手,在理解这个概念时遇到了一些问题
在使用之前,需要对编解码器芯片进行初始化。这包括通过I2C传递数据集。下面给出了要传递的数据以及说明
constant sdin_load : std_logic_vector (11*24-1 downto 0)
--thi
在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
hardwarexilinxhdl
我正在使用一组特定的函数处理ALU。我想,如果我使用一个额外的位来存储进位,那么加法和位移位部分就会容易得多。我试图将一个额外的位连接到两个8位长的“std_逻辑_向量”。额外的位将在加法中保持进位
然而,当我在一些调试之后运行模拟时,它看起来不像是我用来给s_a和s_b它们的值的行在做任何事情。如果我去掉默认值,它们就会变成空的
我确信这个错误是愚蠢的,我不太熟悉vhdl中的串联工作原理,也许有更好的方法来存储执行,如果有任何帮助,我们将不胜感激
代码:
library IEEE;
use I
我有这个计划
我必须为它编写结构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。我想创建一个异步工作的边缘检测器(不使用时钟信号)
我使用了一个简单的示意图:
在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项目。我所有的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 页