我在工作中继承了一些遗留下来的VHDL,并且一直在拼命地想弄清楚一个问题。首先,让我说一下,我对Verilog更有经验,但为了解决这个问题,我已经使用VHDL一段时间了。
因此,我们有一个自2011年以来一直运行良好的产品。然而,我们需要更改FPGA,所以我们正在移植我们的代码。此代码的高级视图是,FPGA将CPU的引导加载程序存储在板载闪存中。加电时,CPU读取FPGA以提取引导加载程序。在我们的旧设计上,它工作得很好。在新的设计中,它在冷的时候不能工作,在温暖的温度下也不是100%可靠的。
我注意到很多代码都做了我认为奇怪的事情,触发器是用信号而不是时钟来计时的。举个例子:
process
我对CPU的时钟速度感到困惑。
看了这篇和之后,我以为我对Pluralsight有了一个坚实的理解,但是当我回到一个关于Pluralsight的VHDL教程时(链接没有给出,因为它不是免费的),我不确定。
请考虑以下代码,它被设计为一个非常简单的计时器:
entity boardio is
port (
clock_50: in bit;
hex0 : out bit_vector(0 to 6);
hex1 : out bit_vector(0 to 6);
hex2 : out bit_vector(0 to 6);
hex3 : out
我想锁存一个信号,但是当我尝试这样做时,我得到了一个周期的延迟,我如何避免这种情况?
myLatch: process(wclk, we) -- Can I ommit the we in the sensitivity list?
begin
if wclk'event and wclk = '1' then
lwe <= we;
end if;
end process;
但是,如果我尝试这样做,并在模拟过程中查看波,lwe会延迟一个wclk周期。我想要实现的就是在wclk的上升沿采样we,并使其保持稳定,直到下一个上升
我是一个VHDL程序员,没有用过太多的Verilog代码。我正在检查别人的代码,我遇到了这样的情况:
always@(posedge asix_clk_bufg or negedge pll_asix_locked)
begin
if (~pll_asix_locked)
asix_rst <= 0;
else if (timer[5]) // 355us between asix_clk and asix_rst (min is 200us)
asix_rst <= 1;
end
我不确定我是否同意上面的代码!不是一个可能的闩锁场
我想计算Xilinx中组合电路的最大路径延迟。我对时序电路很熟悉,我知道如何处理时间限制和在P&R之后产生的时序报告,但是在没有时钟的情况下,我不知道该怎么办?是否有必要在每个组合设计中加上时钟,以便计算出最大路径延迟是多少?例如,对于以下全加法器的VHDL代码,如何测量最大路径延迟?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity full_adder_vhdl_code is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
Cin : in STD_LOGIC;
S : out STD_LO
我是VHDL的初学者。我想做一个将clk除以2的除法器,它的输出是F,F除以2应该是E。当我想编译代码时,它总是显示这个错误: Error (10818):无法推断clk200Hz.vhd(29)的"E“寄存器,因为它没有将其值保持在时钟边沿之外
感谢你的帮助
frequency_divider: process (reset, clk_in) begin
if (reset = '1') then
F <= '0';
E <= '0';
我想要检测到CPLD的外部信号连接(仅连接或未连接)。我的系统时钟是1 1MHz,外部信号是4 4KHz。我已经开发了一种逻辑,它将检测外部信号的上升沿并启动计数器。如果计数器在计数,则连接外部信号,如果计数器不计数,则不连接外部信号。我写了代码,但是它不工作,有什么问题吗?我是VHDL的初学者。请帮帮忙,如何检查一个运行在vhdl中的计数器? library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SYNC_detection1
我是一个VHDL编程的新手,目前正在尝试执行一个程序,在这个程序中,FPGA板上的LED应该在发送完我从Linux服务器生成的每10个以太网数据包后亮起。我写的代码在以下代码中,它不能正常工作。我正在试着解决这个问题,但还是没能解决。任何帮助都将不胜感激。
---------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
--------------
我目前在vivado 2018.3.1中工作,我必须为一个项目进行静态时序分析。为了保存我的进度,我创建了一个基本的Test_project进行实验。当涉及到硬件设计时,我是一个初学者。谁能告诉我,为了得到结果,我必须在Test_project中做些什么? 我的项目是用VHDL写的。Hier是test_project的代码: entity test_design is
Port (
int0 : in std_logic_vector (3 downto 0);
int1 : in std_logic_vector (3 downto 0);
max : out std_l
我在用VHDL做一个时钟分频器。我的输入时钟频率是50 the,我开始使用下面的25 the输出:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
ENTITY CLK25 IS
PORT(clk_in,rst : IN std_logic;
clk_out : OUT std_logic);
END ENTITY CLK25;
ARCHITECTURE behav OF CLK25 IS
SIGNAL clk_in_set : inte
我正在尝试将一个50 VGA的时钟降低到25.175 VGA,以便在VGA控制器中使用。我已经有了一个时钟分频器,但每当当前时钟速度和所需时钟速度的结果分频不是整数时,就会遇到减慢时钟的问题。即50000000/25175000 ~ 1.98.时钟分频器编译并运行,但如果分频为十进制数,则不输出任何内容。下面是我的代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Clockdiv IS PORT (
Clkin: IN STD_LOGIC;
Clk: OUT STD_LOGIC
我是VHDL语言的新手,这是我在StackOverFlow上的第一篇文章。我用VHDL写了这段代码。除了TimingQuest分析器之外,所有的东西都工作得很好。我不知道为什么,但如果我尝试使用实体"register8_bit“的TimingQuest分析器,返回给我”无路径报告“,顺便说一下,如果我使用实体"FLIP_FLOP_D”的TimingQuest分析器,一切都进行得很顺利。如果这个问题不合适或者太长,我会提供删除。
----------------REGISTER A 8 BIT------------------
LIBRARY ieee;
use ieee.st
我的问题是关于以下代码的:
library ieee;
use ieee.std_logic_1164.all;
entity exam is port (
I,CLK,RESET : in std_logic;
Q : out std_logic
);
end entity;
architecture exam_arc of exam is
signal temp_sig : std_logic;
begin
process (CLK,RESET)
begin
if RESET = '1' then
下面的VHDL代码是一个简单的交换程序。但它并没有交换a和b的输入。我已经在评论中给出了成绩单的价值。
library ieee;
use ieee.std_logic_1164.all;
entity vhdl_swap is
port(a,b: inout integer);
end vhdl_swap;
architecture ar of vhdl_swap is
signal s : std_logic;
begin
process(s)
variable var : integer:=0;
begin
report "var is
在上完VHDL课程后,我才开始自学Verilog。我在理解行为语句的执行顺序时遇到了问题。下面是有问题的代码。
//This files is an experiment into the order in which verilog executes it's statements
module MainCircuit(clk, start);
parameter cycles = 8;
input clk;
input start;
//input [15:0] data;
integer i;
always @(posedg
对所有人来说,我是VHDL的新手。我有一个工作的设计,然而,我的模拟一直运行,直到我取消模拟。在测试平台上,如何在x时钟周期后停止模拟?这是在时钟过程中完成的吗?
clk_process :process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;
拜托了,谢谢!
我在VHDL中遇到了两种类型的过程语句。
process(clk)
begin
if rising_edge(clk)
...do something...
另一个是
process
begin
wait until rising_edge(clk)
...do something...
每种方法的优缺点是什么?
我对下面的VHDL代码有一点小问题:
process (zbroji)
begin
if rising_edge(zbroji) then
oduzima <= '0';
ucitanPrvi <= '1';
broj1 <= ulaz_broj;
end if;
end process;
process (oduzmi)
begin
if rising_edge(oduzmi) then
oduzima <= '1';
描述:我想编写vhdl代码,在数组A中找到最大的整数,A是一个由20个整数组成的数组。
问题:
我的算法应该是什么样的,以输入顺序语句所在的位置?
我的vhdl代码:
highnum: for i in 0 to 19 loop
i = 0;
i < 20;
i<= i + 1;
end loop highnum;
这不需要是可综合的,但我不知道如何形成这个循环,一个详细的例子,如何解释如何将不胜感激。
我对CPLD编程完全陌生,我想用VHDL语言在Xilinx ISE Project Navigator中编程一个闩锁+计数器。这就是它必须工作的方式,而且必须是这样的:这种设备获得2个时钟信号。当其中一个从高状态变为低状态时,数据输入位被传输到输出,并被锁存。当第二个时钟从低状态变为高状态时,输出位将递增1。不幸的是,我的代码不想工作……
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter8bit is
port(CLKDA, CLKLD : in
在第28行和第40行,我一直收到错误。错误是“无法在这个时钟边沿上实现赋值的寄存器”,有人能帮我吗?我是VHDL的新手,正在尝试用FPGA板上的内部时钟来制作一个慢速计数器。 LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY part3 IS
port (Clear,CLOCK_50 : IN STD_LOGIC;
Y : OUT STD_LOGIC_VECTOR (7 downto 0));
END part3;
ARCHITECTURE Structural OF part3 IS
compon
我的问题相对简单:在VHDL中是否可以使用进程和关键字生成具有特定、非规则模式的的时钟?
换句话说,如果我有一个产生这样一个时钟的进程:
process(Start)
begin
if Start = '0' then
clock <= '0';
else if Start = '1' then
clock <= '0',
'1' after 25 ns,
我对VHDL非常陌生,正在尝试弄清楚如何在Altera Cyclone II上做一些相当基本的事情。FPGA有四个按钮-其中两个需要编程以增加和减少所选寄存器(0-F),两个需要编程以增加和减少该寄存器中的值(从00到FF)。这是我到目前为止所知道的:
entity raminfr is
port (
clk : in std_logic;
we : in std_logic;
a : in unsigned(3 downto 0);
di : in unsigned(7 downto 0);
do : o
我用VHDL (简单)为我的I2S收发器编写了一个代码。我必须知道如何在每个计数器更新后发送1,2,3 (24位) I2S字的24位中的一个(用一个简短的语句)。例如:
if cnt = 2 => load bit 1 of left channel
if cnt = 3 => load bit 2
if cnt = 25 => load bit 24 of left channel
if cnt = 26 => load bit 1 of right channel
if cnt = 48 => load bit 24 of right channel
如您所见
我不知道怎么准确地描述它,但也许是这样的?
void monitor_thread(void)
{
for(;;){
if (data==10){
data=0;
data2++;
}
}
}
对我来说,在VHDL中,我会意识到这一点:
signal data,data2:std_logic_vector(3 downto 0);
...
process(data)
begin
case data is:
when "0101" => data2<
我们正在用VHDL实现一个以太网MAC控制器。
首先,这里是我的代码的一段代码片段。
-- next state
PROCESS(p_state, phy_start, phy_ctr, phy_clk)
BEGIN
CASE p_state IS
WHEN sIDLE =>
IF(phy_start = '1' or rising_edge(phy_start)) THEN
n_state <= sPRE;
ELSIF(phy_start'event A
我正在开发一个10点移动平均滤波器的分配。我正在采取小步骤,这样我就可以确保我的代码的每个阶段都能正常工作。我的第一步是获取标准逻辑向量(5位)的输入,并将其转换为整数类型的信号进行处理,然后再转换回标准逻辑向量进行输出。我的第一段代码是:
library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
entity AveFilter is
port( CLK : in STD_LOGIC;
RST : in STD_LOGIC;
ADC_In : in
我在同步计数器的一些VHDL代码中遇到了计时问题。我不明白为什么计数器在1个时钟脉冲的情况下前进两次。我已经尝试了所有的方法,包括向D触发器添加不必要的代码,以尝试让它正常工作。这是一个类,我们必须使用我们自己的模型,而不是库块。我是一名软件程序员,在学习这门课程时,有时会遇到“瞬时”任务,而不是程序中的“串行”任务。
如果有人能给我指出正确的方向,我将不胜感激。谢谢
--D-FlipFlop
ENTITY D_flipflop IS
PORT ( D, Clock, Reset : IN STD_LOGIC ;
Q : OUT STD_LOGIC)