su khac nhau giua khai bao bien va tin hieu trong lap trinh vhdl
ve co ban la khong co gia khac nhau ca,.
chi khac la vi trí khai bao và gan tin hieu ra ma thoi. ban thu chu y trong mot so chuong trinh co su dụng 2 khai bao nay la biet ngay ma.
Thông báo
Collapse
No announcement yet.
Sự khác nhau giữa biến và tín hiệu trong lập trình VHDL !
Collapse
X
-
Nếu bạn implement trên FPGA thì P&R được thực hiện tự động và được thông số hóa theo công nghệ của chip FPGA mà bạn đang dùng. Bạn chỉ việc định nghĩa chân vào/ra và sau đó phần mềm sẽ làm cho bạn từ A->Z (theo mình biết là như vậy).Nguyên văn bởi thavali Xem bài viếtBây giờ chuyển sang FPGA (Spatan 3e) nên lại thêm cái phần Placing and Routing, theo mấy bác thì mình nên để ISE nó Placing and Routing tự động hay là mình phải chỉnh sửa trước khi cho nó Placing and Routing. Bác nào có tài liệu về Placing and Routing không giới thiệu cho tui với. xilinx nó nói khá vắn tắc về phần này, nên tui cũng chưa biết xài cái Placing and Routing như thế nào .
Chỉ khi bạn làm ASIC thì bạn phải ngồi viết script và định nghĩa các constraints cho quá trình P&R. Cái này phụ thuộc nhiều vào công nghệ bạn nhắm tới (được cung cấp bởi foundry). Bọn mình dùng Cadence để thực hiện P&R cho ASIC.
Leave a comment:
-
Bây giờ chuyển sang FPGA (Spatan 3e) nên lại thêm cái phần Placing and Routing, theo mấy bác thì mình nên để ISE nó Placing and Routing tự động hay là mình phải chỉnh sửa trước khi cho nó Placing and Routing. Bác nào có tài liệu về Placing and Routing không giới thiệu cho tui với. xilinx nó nói khá vắn tắc về phần này, nên tui cũng chưa biết xài cái Placing and Routing như thế nào .
Leave a comment:
-
Synopsis chuyên về EDA tools, vào synopsis.com xem thử. Còn về thư viện numeric_std vs. std_logic_arith, thì vào http://dz.ee.ethz.ch/support/ic/vhdl...ources.en.html. Thư viện của IEEE là official standard, nhiều người sẽ dùng nó hơn, nhất là ở các hãng.Nguyên văn bởi thavali Xem bài viết
Synopsis là cái gì vậy bác ?
Leave a comment:
-
Topic này dài quá rồi, mình sẽ đóng topic này lại trong một vài ngày tới.
Leave a comment:
-
Vâng, sở dĩ nó ra khác nhau là vì cái code của tui (ảnh trên) là :Nguyên văn bởi yesme@ Xem bài viếtNếu chỉ để lấy cái bít tràn thì chú quay lại cái ví dụ này với cái khai báo c như trên thì sẽ nhìn thấy kết quả 0001 0000. (Không hiểu tại sao chú lại ra kết quả là 0000 0000)
Kết luận cuối cùng là chúng ta vẫn không hiểu nhau lắm !!
Chú muốn một đường, anh hiểu ý chú một nẻo.
Post lên đây cái code mà nói:
Lần sau thảo luận anh em mình post code lên để đỡ mất công ngồi gõ lại (dùng thẻ PHP). Đừng post code dưới dạng ảnh nhé !PHP Code:library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity data_type is
port (
output : out std_logic_vector(7 downto 0)
);
end data_type;
architecture behavioral of data_type is
signal a : std_logic_vector(3 downto 0);
signal b : std_logic_vector(3 downto 0);
signal c : std_logic_vector(7 downto 0);
begin
a <= "0011";
b <= "1101";
c <= conv_std_logic_vector(conv_integer(a) + conv_integer(b),8);
output <= c after 50 ns;
end behavioral;
c = a + b ;
nên nó ra toàn 0000, mà như bác nemsic21 nói là tại vì a,b là hằng số nên cộng trực tiếp như thế làm cho c cũng là hằng nên không có lấy tràn được.
còn nếu viết như code của bác :
c <= conv_std_logic_vector(conv_integer(a) + conv_integer(b),8);
thì nó mới ra đúng ý .
2. Tui thích post ảnh là vì ảnh nó sinh động, nếu xài code mình lại mất công tô vẽ cho nó giống với cái ISE thì mất công. Nhưng bác muốn text hơn thì tui cũng condom lun
.
Leave a comment:
-
vâng. Nếu không có tràn thì ta không nhận biết được sự khác nhau của hai thư viện trên. Nhưng chỉ cần một cái ví dụ như vậy thôi cũng là đủ để kiểm tra rồi.
. Mà tui có được hỏi tiếp không nhỉ, vì còn nhiều thứ muốn hỏi lắm
Leave a comment:
-
Nếu chỉ để lấy cái bít tràn thì chú quay lại cái ví dụ này với cái khai báo c như trên thì sẽ nhìn thấy kết quả 0001 0000. (Không hiểu tại sao chú lại ra kết quả là 0000 0000)Nguyên văn bởi yesme@ Xem bài viếtVì nghĩ là chú cần một ví dụ signed nên anh mới đưa một ví dụ để chú hiểu bản chất khi dùng std_logic_signed. Anh không biết là chú cần ví dụ để so sánh với unsigned. => Lần sau phải nói rõ từ đầu nhé!
====> Bây giờ chú thử dùng lại ví dụ 3 + (-3) = 0 và khai báo lại tín hiệu c
Signal c : OUT std_logic_vector (7 downto 0);
Kết quả chú sẽ thấy sự khác nhau.
Kết luận cuối cùng là chúng ta vẫn không hiểu nhau lắm !!
Chú muốn một đường, anh hiểu ý chú một nẻo.
Post lên đây cái code mà nói:
Lần sau thảo luận anh em mình post code lên để đỡ mất công ngồi gõ lại (dùng thẻ PHP). Đừng post code dưới dạng ảnh nhé !PHP Code:library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity data_type is
port (
output : out std_logic_vector(7 downto 0)
);
end data_type;
architecture behavioral of data_type is
signal a : std_logic_vector(3 downto 0);
signal b : std_logic_vector(3 downto 0);
signal c : std_logic_vector(7 downto 0);
begin
a <= "0011";
b <= "1101";
c <= conv_std_logic_vector(conv_integer(a) + conv_integer(b),8);
output <= c after 50 ns;
end behavioral;
Leave a comment:
-
Đấy chỉ là những trường hợp bị tràn số thì bạn mới có cờ tràn chứ với những giá trị khác thì kết quả vẫn giống nhau.
Leave a comment:
-
Cuối cùng thì cũng ra được như ý rồi mấy bác .
Đây là ví dụ của xilinx (tui sửa lại một chút):
---------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;
entity adders_4 is
port( A,B : in std_logic_vector(3 downto 0);
CI : in std_logic;
SUM : out std_logic_vector(3 downto 0);
CO : out std_logic);
end adders_4;
architecture archi of adders_4 is
signal tmp: std_logic_vector(4 downto 0);
begin
tmp <= conv_std_logic_vector((conv_integer(A) + conv_integer(B) +
conv_integer(CI)),5);
SUM <= tmp(3 downto 0);
CO <= tmp(4);
end archi;
-------------------------
Ở ví dụ này nếu chọn :
A = "0011" (là + 3 )
B = "1101" (là -3 )
thì tmp là "00000"
Ngược lại nếu đổi thành:
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
thì tmp là "10000"
nên SUM vẫn là "0000" nhưng cờ tràn Co là 1.
Mạch tổng hợp cho 2 kiểu khai báo thư viện cũng khác nhau. Vậy là OK rồi.
Cảm ơn mấy bác đã hỗ trợ.
Synopsis là cái gì vậy bác ?@ nemesic21 :
std_logic_arith vẫn là của Synopsis. Thường tôi dùng std_logic_1164 và numeric_std. Nói chung thì mỗi thư viện có pro & con. Bây giờ bạn đang tìm hiểu thì cứ thử, nhưng declare thẳng unsigned / signed vẫn hay hơn. Nếu module của bạn cần dùng cả toán unsigned và signed, dùng cả hai thư viện std_logic_unsigned và std_logic_signed sẽ có conflict.
Leave a comment:
-
Thực ra chúng ta mải lo việc tìm ra sự khác nhau mà quên đi nguyên lý cơ bản khi biểu diễn âm dương dưới dạng số nhị phân (số âm là phần bù 2 của số dương).
Thực ra máy tính chỉ biết thực hiện phép cộng nhị phân. Khi chúng ta muốn cộng hai số thập phân có dấu thì chúng ta đã sử dụng nguyên lý bù 2 để biểu diễn chúng dưới dạng nhị phân => giúp máy tính có thể thực hiện được.
Và do đó, khi bạn đổi kiểu thì giá trị thập phân thay đổi nhưng giá trị nhị phân vẫn từng ấy số 0 và số 1 (không có sự thay đổi) nên kết quả vẫn vậy.
=> Bạn có thể kiểm chứng điều này !!!
Để có thể view được kết quả thì bạn view chúng dưới dạng số nguyên trong chương trình mô phỏng. Bạn có thể thực hiện lại với hai số bất kỳ với độ dài vector cho phép không tràn.
Thử một ví dụ:
Signed: 3 + (-4) = -1 (biểu diễn dưới dạng nhị phân 1111)
Unsigned: 3 + 12 = 15 (biểu diễn dưới dạng nhị phân là 1111). Chú ý khi này giá trị của toán hạng thứ hai không còn là -4 nữa mà là 12Last edited by yesme@; 25-07-2007, 21:44.
Leave a comment:
-
vâng cảm ơn bác. Có lẻ tui sẽ thử lại với bộ full adder signed xem sao, vì mấy cách trên không hiệu quả. Ở tài liệu ISE XST User Guide, xilinx họ có example về đủ các kiểu adder, cả full adder unsigned chỉ trừ mỗi cái full adder signed là hổng có, lại làm khó nhau rồi
. Điều này làm tui thấy một điều thú vị là : Chuyện tưởng chừng đơn giản nhưng lại không phải thế.
Leave a comment:
-
Sao không compare a và b cho dễ thấy?Nguyên văn bởi thavali Xem bài viếtĐúng rồi đó bác yesme@, tui muốn phân biệt sự khác nhau của hai thư viện ieee.std_logic_unsigned.all và ieee.std_logic_signed.all.
Tui đã sửa :
Signal c : OUT std_logic_vector (7 downto 0);
như bác nói.
nhưng tổng hợp vẫn là "00000000" , còn mô phỏng thì không được. Ở hình tổng hợp, các bit của c điều bị kéo xuống GND hết. Hay là ISE nó không thích tui.
Là sao nhỉ.
Trong trường hợp (a+b), a và b đều là (3 downto 0), cho nên kết quả (a+b) cũng chỉ là (3 downto 0). c có nhiều bit hơn vẫn không ăn thua gì. Vì a và b đều là "constants", cho nên output c vẫn sẽ luôn luôn là 0.
Nếu bạn muốn tạo một adder với carry out, bạn nên tham khảo ISE XST User Guide (http://toolbox.xilinx.com/docsan/xil...s/xst/xst.pdf), phần HDL coding techniques.
=======
std_logic_arith vẫn là của Synopsis. Thường tôi dùng std_logic_1164 và numeric_std. Nói chung thì mỗi thư viện có pro & con. Bây giờ bạn đang tìm hiểu thì cứ thử, nhưng declare thẳng unsigned / signed vẫn hay hơn. Nếu module của bạn cần dùng cả toán unsigned và signed, dùng cả hai thư viện std_logic_unsigned và std_logic_signed sẽ có conflict.
Leave a comment:
-
Đúng rồi đó bác yesme@, tui muốn phân biệt sự khác nhau của hai thư viện ieee.std_logic_unsigned.all và ieee.std_logic_signed.all.
Tui đã sửa :
Signal c : OUT std_logic_vector (7 downto 0);
như bác nói.
nhưng tổng hợp vẫn là "00000000" , còn mô phỏng thì không được. Ở hình tổng hợp, các bit của c điều bị kéo xuống GND hết. Hay là ISE nó không thích tui.
Là sao nhỉ.Last edited by thavali; 24-07-2007, 19:08.
Leave a comment:
-
Vì nghĩ là chú cần một ví dụ signed nên anh mới đưa một ví dụ để chú hiểu bản chất khi dùng std_logic_signed. Anh không biết là chú cần ví dụ để so sánh với unsigned. => Lần sau phải nói rõ từ đầu nhé!Về mặt phần cứng ta không thể thu được kết quả như tui mong đợi : chẳn hạn, lấy ví dụ trên của bác. Khi tổng hợp ta thu được tín hiệu c = "0000". Nhưng sau đó ta đổi thư viện thành Use ieee.std_logic_unsigned.all; thì kết quả c vẫn là "0000" vì giá trị 13 + 3 = 16 ="10000" nên c bị tràn.
..........................
====> Bây giờ chú thử dùng lại ví dụ 3 + (-3) = 0 và khai báo lại tín hiệu c
Signal c : OUT std_logic_vector (7 downto 0);
Kết quả chú sẽ thấy sự khác nhau.
Leave a comment:
Bài viết mới nhất
Collapse
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 19:06 -
bởi chinhnguyen9
1. Tính toán cuộn cảm (Inductor)
Để tính giá trị cuộn cảm, chúng ta cần thực hiện các bước sau:
a. Xác định chu kỳ nhiệm vụ (Duty Cycle - D)
Với mạch tăng áp lý tưởng, chu kỳ nhiệm vụ được tính theo công thức :
D=1-VinVout=1-24V30V=0.2
Vậy D = 0.2 (20%)
b....-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 19:03 -
-
bởi chinhnguyen9Công thức
Gain (dB) = 20 × log₁₀(A)
Thí dụ 1; 60dB
log₁₀(A)=60/20=3
⇒ A=V_out / V_in = 10³ = 1.000
Thí dụ 2; 100dB
log₁₀(A)=100/20=5
⇒ A=V_out / V_in = 105 = 100.000
Tí dụ 3; LM 358
Large Signal Open Loop Voltage Gain AVOL V/mV RL = 2.0...-
Channel: Hướng dẫn sử dụng diễn đàn
19-03-2026, 08:44 -
-
Trả lời cho Mạch 3s bị giảm điện áp đầu rabởi minhtri0405chả biết bạn xử lý được chưa , kích sạc hoặc điện áp > điện áp khối pin vào 2 chân P - P+ , nhiều mạch phải yêu cầu có kích lần đầu sau đó mới chạy...
-
Channel: Điện tử dành cho người mới bắt đầu
18-03-2026, 10:01 -
-
bởi minhtri0405đây có phải là 1 cách để test mosfet xịn hay dỏm khi mua đồ tàu không nhỉ , vì ko thể đập ra để coi lõi rồi trả hàng được....
-
Channel: Tâm tình dân kỹ thuật
18-03-2026, 09:57 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:05 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:04 -

Leave a comment: