vinhlocmetal | ||||
nvt_only | ||||
Admin | ||||
suyenhitc | ||||
2110060034 | ||||
quangminhnguyen | ||||
sung_hitu | ||||
liemhuong84 | ||||
williamcuong282 | ||||
kipo00 |
thiết kế mạch chuyển đổi số nhị phân 8 bit sang số BCD
Khoa Điện - Điện Tử Trường Cao Đẳng Công Thương TpHCM :: Khoa Điện-Điện Tử :: Điện tử công nghiệp :: Lập Trình Phần Cứng FPGA
thiết kế mạch chuyển đổi số nhị phân 8 bit sang số BCD
PORT(
Q: out STD_LOGIC_VECTOR(3 downto0);
I0, I1 , I2, I3, I4, I5, I6, I7 : IN STD_LOGIC);
End nhiphan8bit;
Architecture BCD of nhiphan8bit IS
Begin
Process (I0, I1, I2, I3, I4, I5, I6,I7)
In:integer;
I <= I0,I1,I2,I3,I4,I5,I6,I7;
In:= I7*2**0 + I6*2**1 + I5*2**2 + I4*2**3 + I3*2**4 + I2*2**5 + I1*2**6
+ I0*2**7;
IF( In = 0 ) Then Q<= "0000" ;
ELSIF (In = 1 ) Then Q <= "0001" ;
ELSIF (In = 2 ) Then Q <= "0010" ;
ELSIF (In = 3 ) Then Q <= "0011" ;
ELSIF (In = 4 ) Then Q <= "0100" ;
ELSIF (In = 5 ) Then Q <= "0101" ;
ELSIF (In = 6 ) Then Q <= "0110" ;
ELSIF (In = 7 ) Then Q <= "0111" ;
ELSIF (In = 8 ) Then Q <= "1000" ;
ELSIF (In = 9 ) Then Q <= "1001" ;
ElSE NULL;
END IF;
END PROCESS;
END BCD;
mọi người xem giùm xem có sai chỗ nào không
Được sửa bởi 2110060034 ngày Wed Nov 07, 2012 6:52 pm; sửa lần 1.
2110060034- Tổng số bài gửi : 28
Join date : 03/11/2012
Age : 31
Đến từ : Di An Binh Duong
Re: thiết kế mạch chuyển đổi số nhị phân 8 bit sang số BCD
Theo đề bài này thì có 2 cách hiểu:
-Cách thứ nhất là từ mã 7 đoạn(8bit) chuyển ngược lại mã BCD 4 bit. Vậy thì dùng CASE là hay nhất, vì không có quy luật. Không có gì để bàn về cách hiểu này.
-Cách thứ 2 là chỉ lấy 10 trạng thái đầu tiên của 8 bit rồi đem đi so sánh để gán ngõ ra tương ứng. Mình sẽ phân tích cách hiểu này theo ý đồ của bạn Hiệp.
Đúng về ý tưởng(chuyển ngõ vào 8 bít thành Thập phân rồi đem so sánh 0-9, nếu đúng thì gán ngõ ra 4 bit tương ứng) nhưng hiệu quả không cao. VD: ngõ vào là 11111111 thì chương trình của Hiệp vẫn phải thực thi hết cả mấy chục câu lệnh. Và bài lập trình còn khá nhìu lỗi cú pháp.
ENTITY nhiphan8bit IS
PORT( I: inSTD_LOGIC_VECTOR (7 downto 0); --Không cần thiết
Q: out STD_LOGIC_VECTOR(3 downto0);
I0, I1 , I2, I3, I4, I5, I6, I7 : IN STD_LOGIC_VECTOR(1 downto 0); --Ngõ vào chỉ có 1 bit chứ không phải vector 2 bit
In: STD_LOGIC; --Biến trung gian này nên đặt trong Process với kiểu dữ liệu Integer
End nhiphan8bit;
Architecture BCD of nhiphan8bit IS
Begin
Process (I, Q, I0, I1, I2, I3, I4, I5, I6,I7)
I <= I0I1I2I3I4I5I6I7; --Hoàn toàn sai và không cần thiết
Loop --Vô lý
In:= I7*2**0 + I6*2**1 + I5*2**2 + I4*2**3 + I3*2**4 + I2*2**5 + I1*2**6 + I0*2**7;
IF( In = ‘0’ ) Then Q<= 0000 ;
ELSIF (In = ‘ 1’ ) Then Q <= 0001 ; --In là số nguyên không cần ' ', gán ngõ ra thiếu " "
ELSIF (In = ‘ 2’ ) Then Q <= 0010 ;
ELSIF (In = ‘ 3’ ) Then Q <= 0011 ;
ELSIF (In = ‘ 4’ ) Then Q <= 0100 ;
ELSIF (In = ‘ 5’ ) Then Q <= 0101 ;
ELSIF (In = ‘ 6’ ) Then Q <= 0110 ;
ELSIF (In = ‘ 1’ ) Then Q <= 0111 ;
ELSIF (In = ‘ 1’ ) Then Q <= 1000 ;
ELSIF (In = ‘ 1’ ) Then Q <= 1001 ;
ElSE NULL;
END IF;
END LOOP;
END PROCESS;
END BCD;
1 bài toán lập trình không chỉ đúng mà phải tối ưu về dung lượng và tiết kiệm thời gian chạy. Mình có cách ngắn hơn như sau: Bài của Hiệp là từ ngõ vào 8 bit để đưa ra Ngõ ra BCD 4bit (0000 đến 1001). Ta dùng 1 vòng lặp i chạy từ 0 đến 3, gán Out(i) <= In(i) với điều kiện I < "00001010"(để khi ngõ vào ngoài phạm vi khỏi phải chạy vòng lặp). thế là xong. VD: In="00000101" thì Out="0101", rõ ràng là Hiệp chỉ cần lấy 4 bit thấp của ngõ vào gán cho ngõ ra là xong.
Code như sau:
ENTITY nhiphan8bit IS
PORT( I: inSTD_LOGIC_VECTOR (7 downto 0);
Q: out STD_LOGIC_VECTOR(3 downto 0));
end nhiphan8bit;
Architecture BCD of nhiphan8bit IS
Begin
Process(I)
if (I<"00001010")
for i IN 0 to 3 loop
Q(i) <= I(i);
end loop;
else NULL;
end if;
end Process;
end BCD;
williamcuong282- Tổng số bài gửi : 19
Join date : 04/11/2012
Age : 34
Đến từ : Thanh Hóa
Re: thiết kế mạch chuyển đổi số nhị phân 8 bit sang số BCD
mình sửa lại rùi sáng đánh không để ý lại mấy chỗ sai? lệnh CASE thì ai cũng biết mình muốn làm cách khác cho vui?làm gì nó thực hiện mấy chục câu lệnh? nếu không phải 10 trường hợp trên nó sẽ chuyển ELSE kết thúc IF?nếu theo cách của bạn thi 4 trạng thái đầu "0000"ngõ ra BCD không biết máy có hiểu không ta?williamcuong282 đã viết:
Theo đề bài này thì có 2 cách hiểu:
-Cách thứ nhất là từ mã 7 đoạn(8bit) chuyển ngược lại mã BCD 4 bit. Vậy thì dùng CASE là hay nhất, vì không có quy luật. Không có gì để bàn về cách hiểu này.
-Cách thứ 2 là chỉ lấy 10 trạng thái đầu tiên của 8 bit rồi đem đi so sánh để gán ngõ ra tương ứng. Mình sẽ phân tích cách hiểu này theo ý đồ của bạn Hiệp.
Đúng về ý tưởng(chuyển ngõ vào 8 bít thành Thập phân rồi đem so sánh 0-9, nếu đúng thì gán ngõ ra 4 bit tương ứng) nhưng hiệu quả không cao. VD: ngõ vào là 11111111 thì chương trình của Hiệp vẫn phải thực thi hết cả mấy chục câu lệnh. Và bài lập trình còn khá nhìu lỗi cú pháp.
ENTITY nhiphan8bit IS
PORT( I: inSTD_LOGIC_VECTOR (7 downto 0); --Không cần thiết
Q: out STD_LOGIC_VECTOR(3 downto0);
I0, I1 , I2, I3, I4, I5, I6, I7 : IN STD_LOGIC_VECTOR(1 downto 0); --Ngõ vào chỉ có 1 bit chứ không phải vector 2 bit
In: STD_LOGIC; --Biến trung gian này nên đặt trong Process với kiểu dữ liệu Integer
End nhiphan8bit;
Architecture BCD of nhiphan8bit IS
Begin
Process (I, Q, I0, I1, I2, I3, I4, I5, I6,I7)
I <= I0I1I2I3I4I5I6I7; --Hoàn toàn sai và không cần thiết
Loop --Vô lý
In:= I7*2**0 + I6*2**1 + I5*2**2 + I4*2**3 + I3*2**4 + I2*2**5 + I1*2**6 + I0*2**7;
IF( In = ‘0’ ) Then Q<= 0000 ;
ELSIF (In = ‘ 1’ ) Then Q <= 0001 ; --In là số nguyên không cần ' ', gán ngõ ra thiếu " "
ELSIF (In = ‘ 2’ ) Then Q <= 0010 ;
ELSIF (In = ‘ 3’ ) Then Q <= 0011 ;
ELSIF (In = ‘ 4’ ) Then Q <= 0100 ;
ELSIF (In = ‘ 5’ ) Then Q <= 0101 ;
ELSIF (In = ‘ 6’ ) Then Q <= 0110 ;
ELSIF (In = ‘ 1’ ) Then Q <= 0111 ;
ELSIF (In = ‘ 1’ ) Then Q <= 1000 ;
ELSIF (In = ‘ 1’ ) Then Q <= 1001 ;
ElSE NULL;
END IF;
END LOOP;
END PROCESS;
END BCD;
1 bài toán lập trình không chỉ đúng mà phải tối ưu về dung lượng và tiết kiệm thời gian chạy. Mình có cách ngắn hơn như sau: Bài của Hiệp là từ ngõ vào 8 bit để đưa ra Ngõ ra BCD 4bit (0000 đến 1001). Ta dùng 1 vòng lặp i chạy từ 0 đến 3, gán Out(i) <= In(i) với điều kiện I < "00001010"(để khi ngõ vào ngoài phạm vi khỏi phải chạy vòng lặp). thế là xong. VD: In="00000101" thì Out="0101", rõ ràng là Hiệp chỉ cần lấy 4 bit thấp của ngõ vào gán cho ngõ ra là xong.
Code như sau:
ENTITY nhiphan8bit IS
PORT( I: inSTD_LOGIC_VECTOR (7 downto 0);
Q: out STD_LOGIC_VECTOR(3 downto 0));
end nhiphan8bit;
Architecture BCD of nhiphan8bit IS
Begin
Process(I)
if (I<"00001010")
for i IN 0 to 3 loop
Q(i) <= I(i);
end loop;
else NULL;
end if;
end Process;
end BCD;
Process(I)
if (I<"00001010")
for i IN 0 to 3 loop
Q(i) <= I(i);
end loop;
else NULL;
end if;
end Process;
end BCD;
bạn giải thích rõ hơn không mình không hiểu lắm? ví dụ : nếu i=1 tự nhiên Q(1)<=I(1);
2110060034- Tổng số bài gửi : 28
Join date : 03/11/2012
Age : 31
Đến từ : Di An Binh Duong
Re: thiết kế mạch chuyển đổi số nhị phân 8 bit sang số BCD
i chạy từ 0 đến 3 sẽ chạy như sau:
i=0
Q(0) <= I(0) nghĩa là Q(0)=''1''
i=1
Q(1) <= I(1) nghĩa là Q(1)=''0''
i=2
Q(2) <= I(2) nghĩa là Q(2)=''0''
i=3
Q(3) <= I(3) nghĩa là Q(3)=''1''
williamcuong282- Tổng số bài gửi : 19
Join date : 04/11/2012
Age : 34
Đến từ : Thanh Hóa
Re: thiết kế mạch chuyển đổi số nhị phân 8 bit sang số BCD
oh được đó nhỉ? bao giờ thực hành thử làm xem sao hihj cám ơn nháwilliamcuong282 đã viết:Rất đơn giản, VD: ngõ vào I=00001001, thõa mãn ĐK: I<00001010 Ta cần đưa ra Q=1001.
i chạy từ 0 đến 3 sẽ chạy như sau:
i=0
Q(0) <= I(0) nghĩa là Q(0)=''1''
i=1
Q(1) <= I(1) nghĩa là Q(1)=''0''
i=2
Q(2) <= I(2) nghĩa là Q(2)=''0''
i=3
Q(3) <= I(3) nghĩa là Q(3)=''1''
2110060034- Tổng số bài gửi : 28
Join date : 03/11/2012
Age : 31
Đến từ : Di An Binh Duong
» VinhLoc Metal Chuyên: Gia công, sản xuất, thiết kế các loại lưới loa, loa sân khấu
» VINHLOC METAL Chuyên: Gia công, sản xuất, thiết kế các loại lưới loa, loa sân khấu
» Vi Điều Khiển Nhận và gởi Dữ Liệu Qua Cổng Com.
» PHẦN MỀM DELPHI
Khoa Điện - Điện Tử Trường Cao Đẳng Công Thương TpHCM :: Khoa Điện-Điện Tử :: Điện tử công nghiệp :: Lập Trình Phần Cứng FPGA
Mon Oct 05, 2015 1:46 pm by liemhuong84
» Bán túi lọc cặn máy giặt tại Hà Nội
Sun Sep 27, 2015 5:14 am by liemhuong84
» Bán dây curoa máy giặt chính hãng tại Hà Nội
Thu Sep 24, 2015 9:35 am by liemhuong84
» Sửa chữa tủ lạnh Darling tại Hà Nội
Sat Sep 19, 2015 6:21 am by liemhuong84
» Bơm gas tủ lạnh tại hà nội giá rẻ
Sat Sep 12, 2015 2:15 pm by liemhuong84
» Sửa chữa tủ lạnh Electrolux tại nhà
Fri Aug 14, 2015 10:38 am by liemhuong84
» Cửa hàng sửa chữa tủ lạnh tại Hà Nội
Fri Aug 07, 2015 4:02 pm by liemhuong84
» Sửa chữa tủ lạnh Sanyo tại nhà Hà Nội giá rẻ
Sun Aug 02, 2015 5:39 pm by liemhuong84
» điểm kts 1
Wed Jun 24, 2015 9:26 pm by sung_hitu