Câu hỏi về quá trình VHDL

E

EDA_hg81

Guest
Chương trình của tôi với hai quy trình như sau:quá trình (CLK)bắt đầunếu (CLK'EVENT và CLK = '1 ') sau đóĐịa chỉ: Địa chỉ = "0000000000000000001";elsif (RESET = '1 ') sau đóĐịa chỉ: = "0000000000000000000";nếu kết thúc;CEN_ADDR <= addr;kết thúc quá trình;
quá trình (CLK)bắt đầunếu (CLK'EVENT và CLK = '1 ') sau đónếu (RESET = '0 ') sau đóRREG1: = Data1;RREG2: = Data2;RREG3: = DATA3;REG1: = RREG1;REG2: = RREG2;REG3: = RREG3;OUT1 <= REG1;OUT2 <= REG2;OUT 3 <= REG3;nếu kết thúc;nếu kết thúc;kết thúc quá trình;O_DATA1 <= OUT1;O_DATA2 <= OUT2;O_DATA3 <= OUT3;Tôi muốn sử dụng hai phần hiện tại để làm các việc sau:

1) hiện đang quá trình CEN_ADDR và O_DATA1, O_DATA2 và O_DATA3.
2) Soạn ra CEN_ADDR ngay không chậm trễ, và O_DATA1, O_DATA2 và O_DATA3 được trì hoãn trong hai chu kỳ.
Đối với O_DATA1, O_DATA2 và O_DATA3 có thể tiếp cận dữ liệu xe buýt cùng một lúc, chúng tôi đặt ra
từ quá trình.
Bạn có nghĩ O_DATA1, O_DATA2, O_DATA3 có thể được cập nhật một cách chính xác với Data1 đầu vào,
Data2 và DATA3?
Hoặc O_DATA1, O_DATA2 và O_DATA3 được gửi ngay lập tức mà không cần cập nhật?Cảm ơn bạn đã giúp đỡ của bạn.
Last edited by EDA_hg81 ngày 4 tháng 5 năm 2006 01:47; edited 2 lần trong tổng số

 
sorry pal nhưng có quá nhiều sai lầm trong mã của bạn và họ là như sau:

1-bạn didnt xác định các biến (Địa chỉ trong quá trình đầu tiên) (REG1, REG2, REG3 trong quá trình thứ hai).

2-lúc quá trình đầu tiên nếu bạn xem kỹ mã của bạn, bạn sẽ luôn có được

Địa chỉ <= "0000000000000000000" vì quá trình sẽ bắt đầu lại ở cạnh ngã của CLK và nó sẽ luôn tuân thủ các claus khác của tuyên bố nếu.

quá trình (CLK)
bắt đầu
nếu (CLK'EVENT và CLK = '1 ') sau đó
Địa chỉ: Địa chỉ = "0000000000000000001";
khác
Địa chỉ: = "0000000000000000000";
nếu kết thúc;
CEN_ADDR <= addr;
kết thúc quá trình;

3-biến là điều tồi tệ nhất để sử dụng khi bạn làm việc với VHDL (alwas sử dụng tín hiệu không biến)

4-trong quá trình thứ hai i dont tìm thấy bất kỳ ý nghĩa cho ba dòng đầu tiên kể từ ba dòng sau sẽ ghi đè lên ba dòng đầu tiên.xin lỗi, nhưng để nói rằng mã của bạn là hoàn toàn không chính xác ... u cần phải đọc thêm về VHDL và tư vấn i bạn đọc ( "VHDL cho logic lập trình" của skahil kevin)

chúc may mắn

 
Vì vậy, xin lỗi.

Tôi thay đổi nó từ một bản gốc.

Nếu tôi chỉ sử dụng tín hiệu trong quá trình, không những vấn đề thời gian trễ?

 
Trích:quá trình (CLK)

bắt đầu

nếu (CLK'EVENT và CLK = '1 ') sau đó

Địa chỉ: Địa chỉ = "0000000000000000001";

elsif (RESET = '1 ') sau đó

Địa chỉ: = "0000000000000000000";

nếu kết thúc;

CEN_ADDR <= addr;

kết thúc quá trình;
 
Đặt lại nên '1 'cho tất cả để xin lỗi vì sai lầm của tôi.

cho quá trình đầu tiên.Nếu tôi thay đổi nó như sau, nó sẽ làm cho nó tốt hơn?

quá trình (CLK)
bắt đầu
nếu (CLK'EVENT và CLK = '1 ') sau đó
Địa chỉ: Địa chỉ = "0000000000000000001";
elsif (CLK = '1 'và RESET = '1') sau đó
Địa chỉ: = "0000000000000000000";
nếu kết thúc;
kết thúc quá trình;
CEN_ADDR <= addr;

Cảm ơn bạn.

 
đầu tiên u boy điện tử cho biết, các biến có thể được định nghĩa golbally và điều này là không chính xác biến
...... chỉ có thể được xác định trong quá trình này không ngoàinhưng để EDA_hg81 bạn có thể thay đổi mã như sau cho quá trình đầu tiên

tín hiệu Địa chỉ: std_logic_vector (18 downto 0); - điều này được xác định sau khi kiến trúc
- Tờ khai và trước khi bắt đầu

quá trình (CLK, RESET)
bắt đầu

nếu (RESET = '1 ') sau đó
Địa chỉ <= (others => '0 ');
elsif (CLK'EVENT và CLK = '1 ') sau đó
Địa chỉ <= Địa chỉ 1;
kết thúc nếu
kết thúc quá trình;
CEN_ADDR <= addr;

chúc may mắn
[/ quote]

 

Welcome to EDABoard.com

Sponsor

Back
Top