所呈現
有一些明顯的語法錯誤的問題:
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
是指當前模擬時間,是否會導致增量循環?
請正確格式化您的代碼,它會幫助我們幫助您很長的路要走。另外,你的問題是什麼,你有什麼嘗試,你卡在哪裏。就目前而言,它看起來像你希望我們幫助你做作業,這是不行的。 – 2014-10-06 18:11:33