Vhdl 逐次逼近寄存器

Vhdl 逐次逼近寄存器,vhdl,Vhdl,我有一个关于VHDL代码的问题,我正试图为ADC的逐次逼近寄存器编写代码 在下面显示的代码中,DigitalOutTemp是否会在整个for循环中持续更新?或者它只在流程结束时接收OutTemp的值 我想我的逻辑可能有误,但我想做的是让DigitalOutTemp经过一个数模转换器,然后进入一个比较器,与我正在测量的模拟信号进行比较。比较器随后将反馈到寄存器中 LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY SARegister IS

我有一个关于VHDL代码的问题,我正试图为ADC的逐次逼近寄存器编写代码

在下面显示的代码中,DigitalOutTemp是否会在整个for循环中持续更新?或者它只在流程结束时接收OutTemp的值

我想我的逻辑可能有误,但我想做的是让DigitalOutTemp经过一个数模转换器,然后进入一个比较器,与我正在测量的模拟信号进行比较。比较器随后将反馈到寄存器中

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 all
1111..11
(偶数循环)

DigitalOutTemp
在下面显示的代码中,DigitalOutTemp是否会持续更新
在整个for循环中?还是只接收OutTemp的值
在过程的最后

每次写入DigitalOutTemp时,信号将获得计划更新的新值。但是,更新将在当前增量周期结束之前(即触发的所有进程完成之后)才会发生

在此之前,如果您读取信号(在同一进程或任何其他进程中),则保证读取相同的(起始)值

        DigitalOutTemp <= OutTemp;
    END LOOP;

    DigitalOutFinal <= OutTemp;

END IF;
END PROCESS;