nhìn vào VHDL của tôi, tại sao nó không hoạt động sau khi tổng hợp

P

paradbird

Guest
Tôi muốn làm asynchronism viết, nhưng chương trình này không thể làm việc sau khi tổng hợp, tôi không biết tại sao.
Xin cho tôi một số cố vấn.
Cảm ơn rất nhiều.

thư viện ieee;
ieee.std_logic_1164.all sử dụng;
ieee.std_logic_unsigned.all sử dụng;

thực thể là ioInput
port (
D_out1: out std_logic_vector downto 255 (0);
D_out2: out std_logic_vector downto 127 (0);
cs: in std_logic;
wr: in std_logic;
addr: in std_logic_vector (3 downto 0);
D_in: in std_logic_vector (31 downto 0)
);
cuối ioInput;

kiến trúc arch_ioInput của ioInput là

subtype SLV32 là std_logic_vector (31 downto 0);
Loại tmp_Data_in_type là mảng (11 downto 0) của SLV32;
tín hiệu tmp_Data_in: tmp_Data_in_type;

bắt đầu

quá trình (cs, addr, wr, D_in)
bắt đầu
nếu cs = '0 'và wr = '0' rồi
trường hợp là addr
khi "0000" => tmp_Data_in (0) <= D_in;
khi "0.001" => tmp_Data_in (1) <= D_in;
khi "0.010" => tmp_Data_in (2) <= D_in;
khi "0.011" => tmp_Data_in (3) <= D_in;

khi "0.100" => tmp_Data_in (4) <= D_in;
khi "0.101" => tmp_Data_in (5) <= D_in;
khi "0.110" => tmp_Data_in (6) <= D_in;
khi "0.111" => tmp_Data_in (7) <= D_in;
khi "1000" => tmp_Data_in (

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Mát mẻ" border="0" />

<= D_in;
khi "1001" => tmp_Data_in (9) <= D_in;
khi "1010" => tmp_Data_in (10) <= D_in;
khi "1011" => tmp_Data_in (11) <= D_in;

khi những người khác => null;

kết thúc vụ án;
nếu kết thúc;
kết thúc quá trình;
D_out2 <= tmp_Data_in (3) & tmp_Data_in (2) & tmp_Data_in (1) & tmp_Data_in (0);
D_out1 <= tmp_Data_in (11) & tmp_Data_in (10) & tmp_Data_in (9) & tmp_Data_in (

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Mát mẻ" border="0" />

&
tmp_Data_in (7) & tmp_Data_in (6) & tmp_Data_in (5) & tmp_Data_in (4);

cuối arch_ioInput;

 
Mã vẻ hợp lý, có thể nó là công cụ của bạn tổng hợp.Tôi biết synplicity đã gặp rắc rối với "&" đôi khi.

 
Như tôi có thể thấy, tổng số đầu vào và đầu ra pins là rất lớn.Vì vậy, nếu module này được sử dụng như là một cấp cao nhất của một thiết kế, xin hãy kiểm tra các chân io sẵn tối đa của thiết bị bạn selected.If số io tối đa sẽ thấp hơn số bạn đã sử dụng ở đây, nó sẽ không hoạt động chính xác.

BTW, nếu có một tín hiệu đồng hồ trong thiết kế của bạn, xin sửa đổi các mô-đun này để thiết kế synchronus, nếu không, nó sẽ có một logic dài vết chậm trễ!Hãy nhớ rằng VHDL là một ngôn ngữ HARDWARE

 
tại sao ông muốn thêm một đồng hồ để thiết kế của mình?(cũ đồng bộ thiết kế thuyết), ông cụ thể nói đây là một thiết kế asynch ... he's giải mã / muxing đó là cách tốt đẹp, ông đã có nó!.

 
Chào,

Bạn có nhận được bất kỳ cảnh báo, các lỗi sau khi tổng hợp?
Tổng hợp những gì bạn đang sử dụng công cụ?
Điều gì thiết bị / công nghệ là bạn nhắm mục tiêu?

Giới thiệu về đồng hồ, tôi nghĩ bạn không thể đảm bảo rằng kết quả đầu ra của bạn sẽ được estable, tất cả chúng, đồng thời, mặc dù tôi thấy rằng bạn chỉ được thay đổi 32 bit
/ ghi.Và, tất nhiên, phụ thuộc của các thiết bị hạ nguồn mà là lấy mẫu cho họ, và cũng phụ thuộc vào tốc độ của bạn chuyển đầu vào của bạn.
Với một đồng hồ sẽ dễ dàng hơn để thực hiện một analisys thời gian và hạn chế thiết kế của bạn nhưng nếu bạn không muốn sử dụng một đồng hồ, bạn sẽ có lý do của bạn.

Theo arena_yang nói nếu module này được sử dụng ở cấp cao nhất bạn cần một thiết bị với một số chân IO người sử dụng> 422.

Kính trọng,
-Maestor

 
Cho dù đầu vào thực tế "D_in" ở bạn thiết kế đáp ứng với thời gian thiết lập? Nói chung, dữ liệu sẽ được chốt vào đăng ký tại cạnh tăng của wr.

 
hãy kiểm tra tập lệnh hạn chế tổng hợp đầu tiên của bạn.bởi vì nếu bạn thực hiện chế sai, sẽ sản xuất tổng hợp kết quả sai.

luôn luôn nhớ rằng, đó là thiết kế, không tổng hợp, những người là responsable của đúng đắn của thiết kế.

 
hãy kiểm tra tập lệnh hạn chế tổng hợp đầu tiên của bạn.bởi vì nếu bạn thực hiện chế sai, sẽ sản xuất tổng hợp kết quả sai.

luôn luôn nhớ rằng, đó là thiết kế, không tổng hợp, những người là responsable của đúng đắn của các design.great

 
Việc xây dựng VHDL có vẻ là đúng.nếu bạn có nghĩa là thiết kế dos không làm việc trong thế giới thực được carefull để kiểm tra kiểm soát tín hiệu cung cấp cho thiết kế của bạn (CS, WR, địa chỉ, dữ liệu) nó nên được tín hiệu sạch như thiết kế của bạn là compinational bất kỳ thay đổi (nois) trong bất kỳ tín hiệu sẽ thay đổi sản lượng.thời tiết để kiểm tra lỗi do thiết kế hoặc do tín hiệu cung cấp thêm một đầu vào (hướng dẫn sử dụng đồng hồ) rằng các hoạt động của thiết kế được thực hiện với sự thay đổi này kiểm tra đầu vào và đầu ra dự kiến với mỗi cạnh nếu nó wirk chính xác, sau đó là lỗi do để cung cấp tín hiệu khác để thiết kế du lỗi

 
Một cách khác để viết là để sử dụng cạnh tăng của WR tín hiệu.Như thế này ...

quá trình (wr)
bắt đầu

nếu wr'event và wr = '1 'rồi
nếu cs = '0 'rồi
trường hợp là addr
...............

Điều này là phù hợp với phong cách kiến trúc FPGA.

 
chào,

Tôi đồng ý với elektrom.Bạn phải thêm một tín hiệu đồng hồ nếu bạn muốn ghi nhớ một số dữ liệu trong sổ đăng ký.Các tổng hợp sẽ làm điều đó với tín hiệu = '1 'và mã signal'event.Nếu không, sẽ không bao giờ chốt tổng hợp dữ liệu của bạn ...nó sẽ chỉ làm cho logic.<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Cười" border="0" />
 
I Think This Is Too Ambigous Mã Tring để Mux 32 bit để Vì vậy, nhiều chốt.Mabee Bạn Cần Thực hiện It On lớn FPGA (VIRTEX2)
Hoặc In A Way khác nhau!

 

Welcome to EDABoard.com

Sponsor

Back
Top