2014-10-06 119 views
-1

对于以下VHDL代码,假定在时间5 ns时D更改为'1'。每次发生更改时,请给出A, B, C, D, E,F的值。也就是说,给出时间5 ns,5 + delta,5 + 2(delta)等值。执行此操作直到出现20个步骤,直到不再发生变化,或者直到出现重复模式。对于以下VHDL代码

entity prob4 is 

port (D: inout bit); 

end prob4; 

architecture q1 of prob4 is 

signal A,B,C,E,F: bit; 

begin 

C <= A; 

A <= (B and not E) or D; 

P1: proecess (A) 

begin 

B <= A; 

end prcoess P1; 

P2: process 

wait until A <= '1'; 

wait for 0 ns; 

E <= B after 5 ns; 

D < = '0'; 

F <= E; 

end process P2; 

end architecture q1; 
+1

请正确格式化您的代码,它会帮助我们帮助您很长的路要走。另外,你的问题是什么,你有什么尝试,你卡在哪里。就目前而言,它看起来像你希望我们帮助你做作业,这是不行的。 – 2014-10-06 18:11:33

回答

0

所呈现

有一些明显的语法错误的问题:

entity prob4 is 
    port (D: inout bit); 
end prob4; 

architecture q1 of prob4 is 
    signal A,B,C,E,F: bit; 
begin 

    C <= A; 
    A <= (B and not E) or D; 

P1: proecess (A) -- misspelled process 
    begin  
     B <= A; 
    end prcoess P1; -- misspelled process 

P2: process 
    -- begin -- missing begin 

     wait until A <= '1';  
     wait for 0 ns; 

     E <= B after 5 ns; 
     D < = '0'; -- should be "<=" (a single delimiter token signifying assignment) 
     F <= E; 
    end process P2; 
end architecture q1; 

回答这个问题似乎需要你注意听课,做笔记和/或完成了所需的阅读。

注意,有两个驱动程序的一个过程P2分配D,其他模式inout端口D。对于BIT类型没有解决方案,这意味着某些未由VHDL设计规范显示的事件负责在5 ns时为D分配值1,并且未驱动端口D的实际值。解析函数可以与任何子类型声明相关联(并且端口声明声明子类型)。

那是不是这里的情况:

entity tb_prob4 is 
end entity; 

architecture foo of tb_prob4 is 
    signal D: bit; 
begin 

DUT: 
    entity work.prob4 port map (D); 

STIMULUS: 
    process 
    begin 
     D <= '1' after 5 ns; 
    wait; 
    end process; 
end architecture; 

ghdl -a prob4 .vhdl
ghdl -e tb_prob4
ghdl -r tb_prob4
./tb_prob4:error: several sources for unresolved signal
for signal: .tb_prob4(foo).ghdl: compilation error

理论上你就可以回答与相应的VHDL步进的prob4的分析版本的模拟你的“问题”提供的“问题”工具。这需要强制D在5 ns时为'1',并在被测设备的下一个增量周期(一步之后)释放它。否则,这是一个无意义的问题,VHDL设计规范是无效的(见上文)。你可以推测一下,“假设D变为'1'”被添加来避开关于有效性的问题。

解决问题

的问题也还用手(纸笔)来完成。

“......假设D在时间5ns变为'1'”听起来像是暗示单一事件(没有持久力)。

在VHDL中,未初始化的信号将采用最左边的值,对于类型位的枚举值为'0'(请参见封装std.standard)。这告诉你什么都是5纳秒。 (A,B,C,D,E,F的初始值是多少?)

通过分配到当前模拟时间来推断增量循环。当进一步的信号分配安排在当前模拟时间时,仿真时间会提前。然后仿真时间提前到下一次预定事务出现在建模设计层次的预计输出波形中。

after在投影输出波形中为其目标安排一个信号事件。在示例中,计划将分配给D的当前值为B

模拟时间前进到下一次事件(等待,之后),wait for 0 ns是指当前模拟时间,是否会导致增量循环?