حاسبة مع إتش دي إل -- مشكلة محاكاة

T

true_niea

Guest
مرحبا يمكن لأي شخص يمكن ان يساعدني في هذا الترميز...الدردشة تقوم مشروع صغير بلدي..ولكن المشكلة هي بعد كتابة رمز إتش دي إل للحاسبة الترميز لا تظهر غالبا ولكن عندما كنت في محاولة لمحاكاة تظهر أي الإخراج

هنا أرفق الترميز

IEEE المكتبة ؛
IEEE.STD_LOGIC_1164.ALL استخدام ؛
IEEE.STD_LOGIC_ARITH.ALL استخدام ؛
IEEE.STD_LOGIC_UNSIGNED.ALL استخدام ؛آلة حاسبة الكيان
الميناء (أ ، ب : في نطاق صحيحا 0 إلى 7 ؛
clk : في بت ؛
sel : في std_logic_vector (1 downto 0) ؛
س : من bit_vector (6 downto 0) ؛
وهو : من bit_vector (3 downto 0)) ؛

آلة حاسبة الغاية ؛

العمارة السلوكية من الحاسبة
إشارة فرعية : مجموعة صحيحا 0 إلى 7 ؛
إشارة المبلغ : مجموعة صحيحا 0 إلى 14 ؛
إشارة div : مجموعة صحيحا 0 إلى 7 ؛
إشارة مول : صحيح النطاق 0 إلى 49 ؛

إشارة Qsub ، Qsum1 ، Qsum2 ، Qmul ، Qmul2 ، Qdiv : bit_vector (6 downto 0) ؛
إشارة ناقص : bit_vector (6 downto 0) ؛

إشارة divRemainder : bit_vector (6 downto 0) ؛
إشارة B1 : bit_vector (6 downto 0) ؛

إشارة clk1 : بت ؛يبدأ

clkDiv : عملية
العد متغير : مجموعة صحيحا 0 حتي 50000000 ؛
يبدأ
انتظر حتى clk'event وclk = '1' ؛
العد : العد = 1 ؛
إذا كان (عد = 50000000) ثم
العد : = 0 ؛
elsif (العد <25000000) ثم
clk1 <= '0' ؛
elsif (العد> 25000000) ثم
clk1 <= '1' ؛
إذا كانت الغاية ؛
نهاية عملية clkDiv ؛sub_opration : عملية (أ ، ب)
يبدأإذا كان (أ> باء) ثم
شبه <= أب ؛
ناقص <= "1111111" ؛
قضية فرعية هي
عندما 0 => Qsub <= "1000000" ؛
عندما 1 => Qsub <= "1111001" ؛
عندما 2 => Qsub <= "0100100" ؛
عندما 3 => Qsub <= "0110000" ؛
عندما 4 => Qsub <= "0011001" ؛
عندما 5 => Qsub <= "0010010" ؛
عندما 6 => Qsub <= "0000010" ؛
عند 7 => Qsub <= "1011000" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛

أيضا
شبه <= مكتبة الإسكندرية ؛
ناقص <= "0111111" ؛
قضية فرعية هي
عندما 0 => Qsub <= "1000000" ؛
عندما 1 => Qsub <= "1111001" ؛
عندما 2 => Qsub <= "0100100" ؛
عندما 3 => Qsub <= "0110000" ؛
عندما 4 => Qsub <= "0011001" ؛
عندما 5 => Qsub <= "0010010" ؛
عندما 6 => Qsub <= "0000010" ؛
عند 7 => Qsub <= "1011000" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛
إذا كانت الغاية ؛نهاية عملية sub_opration ؛

sum_opration : عملية (أ ، ب)
يبدأ

خلاصة القول <= ألف باء ؛

خلاصة القول هي القضية

عندما 0 => Qsum1 <= "1000000" ؛
Qsum2 <= "1111111" ؛
عندما 1 => Qsum1 <= "1111001" ؛
Qsum2 <= "1111111" ؛
عندما 2 => Qsum1 <= "0100100" ؛
Qsum2 <= "1111111" ؛
عندما 3 => Qsum1 <= "0110000" ؛
Qsum2 <= "1111111" ؛
عندما 4 => Qsum1 <= "0011001" ؛
Qsum2 <= "1111111" ؛
عندما 5 => Qsum1 <= "0010010" ؛
Qsum2 <= "1111111" ؛
عندما 6 => Qsum1 <= "0000010" ؛
Qsum2 <= "1111111" ؛
عند 7 => Qsum1 <= "1011000" ؛
Qsum2 <= "1111111" ؛
عندما 8 => Qsum1 <= "0000000" ؛
Qsum2 <= "1111111" ؛
عندما 9 => Qsum1 <= "0010000" ؛
Qsum2 <= "1111111" ؛
عند 10 => Qsum1 <= "1000000" ؛
Qsum2 <= "1111001" ؛
عند 11 => Qsum1 <= "1111001" ؛
Qsum2 <= "1111001" ؛
عند 12 => Qsum1 <= "0100100" ؛
Qsum2 <= "1111001" ؛
عندما قتل 13 => Qsum1 <= "0110000" ؛
Qsum2 <= "1111001" ؛
عند 14 => Qsum1 <= "0011001" ؛
Qsum2 <= "1111001" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛نهاية عملية sum_opration ؛

Mul_operation : عملية (أ ، ب)
Remm10 متغير : مجموعة صحيحا 0 إلى 9 ؛
C1 متغير : صحيح تتراوح من 1 الى 7 : = 7 ؛
يبدأ
تتداخل <= * ألف باء ؛

إذا كان (مول <10) ثم
القضية هي مول
عندما 0 => Qmul <= "1000000" ؛
Qmul2 <= "1111111" ؛
عندما 1 => Qmul <= "1111001" ؛
Qmul2 <= "1111111" ؛
عندما 2 => Qmul <= "0100100" ؛
Qmul2 <= "1111111" ؛
عندما 3 => Qmul <= "0110000" ؛
Qmul2 <= "1111111" ؛
عندما 4 => Qmul <= "0011001" ؛
Qmul2 <= "1111111" ؛
عندما 5 => Qmul <= "0010010" ؛
Qmul2 <= "1111111" ؛
عندما 6 => Qmul <= "0000010" ؛
Qmul2 <= "1111111" ؛
عند 7 => Qmul <= "1011000" ؛
Qmul2 <= "1111111" ؛
عندما 8 => Qmul <= "0000000" ؛
Qmul2 <= "1111001" ؛
عندما 9 => Qmul <= "0010000" ؛
Qmul2 <= "1111111" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛

أيضا
ل ي في 7 downto الحلقة 1

إذا كان (10 * C1 <مول أو 10 * C1 = مول) ثم
تتداخل <= 10 * C1 ؛
Remm10 : = 10 * C1 - مول ؛
إذا كانت الغاية ؛
C1 : = C1 - 1 ؛

حلقة الغاية ؛

القضية هي مول
عندما 0 => Qmul2 <= "1000000" ؛
عندما 1 => Qmul2 <= "1111001" ؛
عندما 2 => Qmul2 <= "0100100" ؛
عندما 3 => Qmul2 <= "0110000" ؛
عندما 4 => Qmul2 <= "0011001" ؛
عندما 5 => Qmul2 <= "0010010" ؛
عندما 6 => Qmul2 <= "0000010" ؛
عند 7 => Qmul2 <= "1011000" ؛
عندما 8 => Qmul2 <= "0000000" ؛
عندما 9 => Qmul2 <= "0010000" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛

Remm10 القضية
عندما 0 => Qmul <= "1000000" ؛
عندما 1 => Qmul <= "1111001" ؛
عندما 2 => Qmul <= "0100100" ؛
عندما 3 => Qmul <= "0110000" ؛
عندما 4 => Qmul <= "0011001" ؛
عندما 5 => Qmul <= "0010010" ؛
عندما 6 => Qmul <= "0000010" ؛
عند 7 => Qmul <= "1011000" ؛
عند 8 => Qmul <= "0000000" ؛
عندما 9 => Qmul <= "0010000" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛

إذا كانت الغاية ؛

نهاية عملية Mul_operation ؛

div_operation : عملية (أ ، ب)
جيم متغير : صحيح تتراوح من 1 الى 7 : = 7 ؛
Remm متغير : مجموعة صحيحا 0 إلى 9 ؛
يبدأ

لأنني في 7 downto الحلقة 1

إذا (أ = ب) ثم
div <= 1 ؛
Remm : = 0 ؛

elsif (باء> ألف) ثم
div <= 0 ؛

elsif (أ> باء) ثم
إذا كان (* باء جيم <ألف) ثم
div <= * باء جيم ؛
Remm : = ب * كاليفورنيا ؛ -- سيتم عرض النتيجة على النحو التالي : div _ | _ المتبقية | ب
إذا كانت الغاية ؛
جيم : = جيم - 1 ؛
إذا كانت الغاية ؛

حلقة الغاية ؛

div القضية
عندما 0 => Qdiv <= "1000000" ؛
عندما 1 => Qdiv <= "1111001" ؛
عندما 2 => Qdiv <= "0100100" ؛
عندما 3 => Qdiv <= "0110000" ؛
عندما 4 => Qdiv <= "0011001" ؛
عندما 5 => Qdiv <= "0010010" ؛
عندما 6 => Qdiv <= "0000010" ؛
عند 7 => Qdiv <= "1011000" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛

القضية هي Remm
عندما 0 => divRemainder <= "1000000" ؛
عندما 1 => divRemainder <= "1111001" ؛
عندما 2 => divRemainder <= "0100100" ؛
عندما 3 => divRemainder <= "0110000" ؛
عندما 4 => divRemainder <= "0011001" ؛
عندما 5 => divRemainder <= "0010010" ؛
عندما 6 => divRemainder <= "0000010" ؛
عند 7 => divRemainder <= "1011000" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛

القضية الثانية هي
عندما 0 => B1 <= "1000000" ؛
عندما 1 => B1 <= "1111001" ؛
عندما 2 => B1 <= "0100100" ؛
عندما 3 => B1 <= "0110000" ؛
عندما 4 => B1 <= "0011001" ؛
عندما 5 => B1 <= "0010010" ؛
عندما 6 => B1 <= "0000010" ؛
عند 7 => B1 <= "1011000" ؛
عند الآخرين => لاغية ؛
حالة الغاية ؛

نهاية عملية div_operation ؛الاختيار : عملية (clk1 ، وملح ل
م متغير : صحيح النطاق 0 إلى 3 : = 0 ؛
يبدأ
إذا كان (clk1'event وclk1 = '1') ثم

م القضية
عندما 0 =>
إذا وملح = "00") ثم
س <= Qsub ؛
elsif وملح = "01") ثم
س <= Qsum1 ؛
elsif وملح = "10") ثم
س <= Qmul ؛
elsif وملح = "11") ثم
س <= B1 ؛
إذا كانت الغاية ؛
في 1110 <= "" ؛

عندما 1 =>
إذا وملح = "00") ثم
س <= ناقص ؛
elsif وملح = "01") ثم
س <= Qsum2 ؛
elsif وملح = "10") ثم
س <= Qmul2 ؛
elsif وملح = "11") ثم
س <= "1110011" ؛ -- عرض _ |
إذا كانت الغاية ؛
في 1101 <= "" ؛

عندما 2 =>
إذا وملح = "11") ثم
س <= divRemainder ؛
إذا كانت الغاية ؛
في 1011 <= "" ؛

عندما 3 =>
إذا وملح = "11") ثم
س <= Qdiv ؛
إذا كانت الغاية ؛
في 0111 <= "" ؛

حالة الغاية ؛
م : م = 1 ؛
إذا كانت الغاية ؛
نهاية عملية الاختيار ؛
نهاية السلوكية ؛<img src="http://images.elektroda.net/27_1255832658_thumb.jpg" border="0" alt="Calculator with VHDL - simulation problem" title="آلة حاسبة مع إتش دي إل -- مشكلة محاكاة"/>
 
أنت لست 'المريض' بما فيه الكفاية.

يبدو أنك تستخدم Clk1 لتحديث وهناك سؤال.هذا Clk1 مشتق من 'الرئيسي' Clk مدار الساعة ، والتي هي في الأساس مقسوما على 25000000.الخاصة بك في محاكاة فقط لديك 1 Clk دورة...ليس علينا سوى الانتظار 25000000 دورات وأكثر من ذلك ، وسترون النتيجة التي تظهر في بعض وهناك سؤال.
أو ، في عملية التغيير clkDiv حتى يدير Clk1 'أسرع'...

 

Welcome to EDABoard.com

Sponsor

Back
Top