Vhdl 逐次逼近寄存器
我有一个关于VHDL代码的问题,我正试图为ADC的逐次逼近寄存器编写代码 在下面显示的代码中,DigitalOutTemp是否会在整个for循环中持续更新?或者它只在流程结束时接收OutTemp的值 我想我的逻辑可能有误,但我想做的是让DigitalOutTemp经过一个数模转换器,然后进入一个比较器,与我正在测量的模拟信号进行比较。比较器随后将反馈到寄存器中Vhdl 逐次逼近寄存器,vhdl,Vhdl,我有一个关于VHDL代码的问题,我正试图为ADC的逐次逼近寄存器编写代码 在下面显示的代码中,DigitalOutTemp是否会在整个for循环中持续更新?或者它只在流程结束时接收OutTemp的值 我想我的逻辑可能有误,但我想做的是让DigitalOutTemp经过一个数模转换器,然后进入一个比较器,与我正在测量的模拟信号进行比较。比较器随后将反馈到寄存器中 LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY SARegister IS
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY SARegister IS
PORT (
Comparator, Clock : IN std_logic;
DigitalOutFinal, DigitalOutTemp : OUT std_logic_vector (13 downto 0)
);
END;
ARCHITECTURE Behavioural OF SARegister IS
BEGIN
PROCESS (CompIn, Clock)
VARIABLE OutTemp : std_logic_vector (13 downto 0);
BEGIN
IF (rising_edge(Clock)) THEN
OutTemp := "10000000000000";
FOR i IN 13 downto 0 LOOP
IF (Comparator = '0') THEN
OutTemp(i) := '0';
END IF;
IF (i > 0) THEN
OutTemp(i - 1) := '1';
END IF;
DigitalOutTemp <= OutTemp;
END LOOP;
DigitalOutFinal <= OutTemp;
END IF;
END PROCESS;
END;
ieee库;
使用ieee.std_logic_1164.all;
实体SARegister是
港口(
比较器,时钟:标准_逻辑中;
DigitalOutFinal,DigitalOutTemp:OUT标准逻辑向量(13到0)
);
结束;
SARegister的建筑行为是
开始
进程(CompIn,时钟)
变量OutTemp:std_逻辑_向量(13到0);
开始
如果(上升沿(时钟)),则
OutTemp:=“100000000000”;
对于13到0循环中的i
如果(比较器='0'),则
输出温度(i):=“0”;
如果结束;
如果(i>0),则
OutTemp(i-1):=“1”;
如果结束;
DigitalOutTemp我不清楚您的转换,您的代码太奇怪了。但我会指出你代码中的错误这不是答案,因为评论写起来很难。希望这能让你的代码更好
PROCESS (CompIn, Clock)
这个敏感列表可能导致一些我不知道的事情,因为我在代码中再也看不到CompIn
信号。如果您希望它是一个寄存器,请仅将时钟
或设置
或重置
信号放在此列表上(或启用
时钟选通)
VARIABLE OutTemp : std_logic_vector (13 downto 0);
BEGIN
IF (rising_edge(Clock)) THEN
OutTemp := "10000000000000";
FOR i IN 13 downto 0 LOOP
IF (Comparator = '0') THEN
OutTemp(i) := '0';
END IF;
IF (i > 0) THEN
OutTemp(i - 1) := '1';
END IF;
两个if
不会导致更好的结果,因为第二个将覆盖第一个。我确定OutTemp
在这之后使用get all1111..11
(偶数循环)
DigitalOutTemp
在下面显示的代码中,DigitalOutTemp是否会持续更新
在整个for循环中?还是只接收OutTemp的值
在过程的最后
每次写入DigitalOutTemp时,信号将获得计划更新的新值。但是,更新将在当前增量周期结束之前(即触发的所有进程完成之后)才会发生
在此之前,如果您读取信号(在同一进程或任何其他进程中),则保证读取相同的(起始)值
DigitalOutTemp <= OutTemp;
END LOOP;
DigitalOutFinal <= OutTemp;
END IF;
END PROCESS;