VHDL如何检测数据发生变化,类似rising_edge 这种

如题所述

第1个回答  推荐于2017-09-26
用==等号,先将当前的数值保存在寄存器中,然后在比较该寄存器的数值和输入的数值是否相等,来判断数据是否在变化
例如,输入信号为inputA,
将inputA保存为regA,然后判断if(inputA==regA) then c<=1;elsec<=0;endif;

若inputA发生了变化,则判断结果c为0,否则c为1本回答被提问者采纳
第2个回答  2012-10-28
用 clock'event追问

clock'event and clock=1 只能判断0,1的变换 类似数据由100变到了150这样的情况根本解决不了

第3个回答  2018-05-24
我也遇到了这个问题,我是这么解决的。
在PROCESS结束前,将这个信号(data_out通过输入端口,立即改变)赋值给另一个信号(data_out_dac自定义),然后在process开始的时候进行比较,因为process里面是顺序结构的,所以仿真通过了,希望对大家有帮助。
process(sclk_out_tmp,resetin)
variable cnt:integer range 0 to 32:=0;
begin
if resetin='0' then
sync_out_tmp<='1';
da_data_out<='0';
cnt:=0;
elsif data_out/=data_out_dac then --进行比较
cnt:=1;
sync_out_tmp<='1';
elsif rising_edge(sclk_out_tmp) then
cnt:=cnt+1;
if cnt=1 then
sync_out_tmp<='1';
elsif cnt>=2 and cnt<18 then
sync_out_tmp<='0';
da_data_out<=data_out_dac(17-cnt);
elsif cnt=20 then
sync_out_tmp<='1';
cnt:=0;
end if;
end if;
data_out_dac<= data_out;--赋值
end process;

VHDL如何检测数据发生变化,类似rising_edge 这种
用==等号,先将当前的数值保存在寄存器中,然后在比较该寄存器的数值和输入的数值是否相等,来判断数据是否在变化 例如,输入信号为inputA,将inputA保存为regA,然后判断if(inputA==regA) then c<=1;elsec<=0;endif;若inputA发生了变化,则判断结果c为0,否则c为1 ...

在VHDL中,如何描述时钟信号上升沿和下降沿?
上升沿:process(i)begin if(i'event and i = '1') then DO SOMETHING;end if;end process;下降沿:i = '0'

VHDL 读取文件中数据的问题
你可以这么写 while not endfile(filein)loop--判断是否读完文件 wait until rising_edge(clk);--每个时钟读一行 readline(filein,buf);read(buf,data);--如果一行有多个空格隔开的数据可以继续执行read,当然也可以不去读 x<=data; --如果x不是integer类型就需要进行转换 end loop;...

vhdl 根据两信号上升沿先后顺序来给变量赋值
wait until rising_edge(din);wait until (pout='1') ;对于这两个语句我也认为有问题,相当于同一进程用了两个时钟源;把wait until (pout='1') ;换成if pout='1' then 给你分析了下,因为pout<=din xor fin;综合的异或门有延时,所以有种特殊情况:如果其中有一个信号一直为低则比较不出...

VHDL语言帮忙解读下,急用啊 谢谢!!!
if rising_edge(clock) then ---判断时钟上升沿 if a1=n-1 then a1:=0;temp1:='0'; --如果a1=n-1时候,将a1和temp清零 elsif a1<((n+1)\/2-1) then temp1:='1';a1:=a1+1; ---否则,如果这个条件满足 a1自加1,temp1赋值1;elsif a1>=((n+1)\/2-1) then temp1:='0...

关于VHDL计数器 reset功能的请教
你所说的这个在同一个信号是实现不了的,我给你个方法,先设置一个信号,通过reset来改变它,然后通过它来重置,就可以实现一个时钟信号的时候重置,再给一个时钟信号的时候不重置 signal flag:std_logic;begin process(reset)begin if rising_edge (reset) THEN flag<=not flag;end if;end process...

VHDL编译出现如下的问题怎么解决
这个的意思是您的这几个输出管脚直接接地了(意思是它们的值一直都是0)。当然如果这符合您的设计要求这种警告可以不管。Warning: Following 3 pins have nothing, GND, or VCC driving datain port -- changes to this connectivity may change fitting results Info: Pin sound has GND driving its ...

谁帮我分析下这个VHDL代码高分!
elsif rising_edge(clk) then if step_pulse = '1' then-- 计数脉冲有效的情况下进入状态机跳转,也就是64个周期进入一次 case state is when s_attack => if velocity = 0 then--按键力度是0的话(就是没按),直接进入释放状态 state <= s_release;else phase_counter <= phase_counter ...

用VHDL语言编写程序
IF rising_edge(clka) THEN saomiao<=saomiao+1;if saomiao=9 then saomiao<=0;end if;case saomiao is ---'1'代表不亮,'0'代表亮 when 0 =>row<="01111111";when 1 =>row<="10111111";when 2 =>row<="11011111";when 3 =>row<="11101111";when 4 =>row<="11110111";wh...

关于VHDL的一个问题。串行输入64位二进制数,要求把数据按每8位存在8...
没综合试一下,估计问题不大,根据en_i信号对输入的串行信号进行接收,并在接收完毕后输出8个8位信号,并加入了updata信号供后端使用 library ieee;use ieee.std_logic_1164.all;entity test is port (clk_i : in std_logic;rst_n_i : in std_logic;en_i : in std_logic;din...

相似回答