Em mới học về VHDL, em thấy khi phân biệt RTL code và Behavior code rất mơ hồ ví dụ như cùng code VHDL cả nhưng RTL thì tổng hợp đc còn Behavior chỉ để mô phỏng và debug ... Em đang muốn học để code theo RTL coding style để sau này còn synthesize. Em không biết bắt đầu từ đâu, học như thế nào, đọc tài liệu nào, code ntn để là RTL chứ không phải Behavior (sorry vì em học code theo C, C++ quen rồi ... nên có thể hỏi hơi ngớ ngẩn) Các anh, chị đi trước có thể giải thích cũng như cho em lời khuyên hay cách học được không. Thanks
Thông báo
Collapse
No announcement yet.
Phân biệt RTL code và Behavior code,
Collapse
X
-
VHDL là viết tắt của "Very high speed Hardware Description Language" nên nó là ngôn ngữ mô tả phần cứng chứ không phải là ngôn ngữ lập trình. Đó là điều mà trước tiên bạn cần phải nhớ kỹ. Khi bạn viết VHDL tức là bạn đang mô tả lại phần cứng mà bạn thiết kế chứ không phải là bạn đang lập trình. RTL là viết tắt của "Register Transfer Level". Những mạch số mà bạn thiết kế có thể được môt tả bằng những phần tử flipflop có trong mạch, và mạch combinational logic giữa các flipflop này. RTL code tức là đoạn code mô tả hoạt động của phần combinational logic nằm giữa các flipflop (Register). Các phần mềm EDA sẽ tổng hợp đoạn code của bạn để tạo ra mạch logic nằm giữa các flipflop thực hiện chức năng mà bạn đã mô tả.
Vì vậy khi bạn viết RTL code thì bạn trước hết cần hiểu được các phần mềm EDA sẽ tổng hợp các đoạn code thành mạch thực tế như thế nào (ví dụ như câu lệnh if sẽ được chuyển thành mux, câu lệnh for sẽ được unroll thành nhiều đoạn mạch tương tự nhau...). Sau đó bạn phải biết được mạch bạn đang thiết kế là như thế nào (ở đây dùng FSM, ở kia dùng ALU...) rồi sau cùng mới viết code mô tả mạch mà bạn thiết kế. Cái này cần một chút kinh nghiệm nhưng sau khi quen rồi thì có thể xem qua là đã biết mạch cần phải làm là như thế nào và viết thế nào rồi.
Ở đây có một quyển sách tớ nghĩ là cũng tạm được bạn muốn có thể xem qua.
RTL Hardware Design Using VHDL: Coding for Efficiency, Portability, and Scalability
Deposit Files
-
Chào bạn Gimemecs1315,
Mình có một cách phân biệt cũng khá mơ hồ, đó là "behaviour code" là code mà không systhesis được. Ví dụ bạn viết #45 ns; thì chẳng tool nào tổng hợp được dòng code đấy cho bạn được, nhưng nó là behaviour cho một mạch delay 45ns.Nguyên văn bởi Gimemecs1315 Xem bài viếtEm mới học về VHDL, em thấy khi phân biệt RTL code và Behavior code rất mơ hồ ví dụ như cùng code VHDL cả nhưng RTL thì tổng hợp đc còn Behavior chỉ để mô phỏng và debug ... Em đang muốn học để code theo RTL coding style để sau này còn synthesize.
Về cách học code thì bác Rommel.de đã chỉ ra những điểm rât mấu chốt rồi.
Thân mến,
Comment
-
chào cả nhà. mình có đoạn chuong trình này mong mọi người giải thích cho mình;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use work.CALC1_PAK.all;ENTITY CNTRL_FSM_TB_vhd IS
END CNTRL_FSM_TB_vhd;
ARCHITECTURE behavior OF CNTRL_FSM_TB_vhd IS
COMPONENT CNTRL_FSM
PORT(
DATA_FRAME : IN MY_RECORD;
CLK : IN std_logic;
RESET : IN std_logic;
A_OP : OUT std_logic_vector(3 downto 0);
B_OP : OUT std_logic_vector(3 downto 0);
C_IN : OUT std_logic;
OP_CODE : OUT std_logic_vector(3 downto 0);
EXP : OUT std_logic_vector(3 downto 0);
MEM_EN : OUT std_logic;
ALU_EN : OUT std_logic ;
COMP_EN : OUT std_logic ;
ADDR : OUT std_logic_vector(2 downto 0) );
END COMPONENT;
SIGNAL DATA_FRAME : MY_RECORD := ("0000", "0000","0000",'0',"0000");
SIGNAL CLK : std_logic := '0';
SIGNAL RESET : std_logic := '0';
SIGNAL A_IN, B_IN : std_logic_vector(3 downto 0);
SIGNAL C_IN : std_logic;
SIGNAL OP_CODE : std_logic_vector(3 downto 0);
SIGNAL EXP : std_logic_vector(3 downto 0);
SIGNAL ALU_EN, MEM_EN, COMP_EN : std_logic;
SIGNAL ADDR : std_logic_vector(2 downto 0);
BEGIN
uut: CNTRL_FSM PORT MAP(
DATA_FRAME => DATA_FRAME,
CLK => CLK,
RESET => RESET,
A_IN => A_IN,
B_IN => B_IN,
C_IN => C_IN,
OP_CODE => OP_CODE,
EXP => EXP,
ALU_EN => ALU_EN, MEM_EN => MEM_EN, COMP_EN => COMP_EN ,
ADDR => ADDR );
CLK <= not CLK after 20 ns;
RESET <= '1' after 10 ns, '0' after 25 ns;
tb : PROCESS
BEGIN
DATA_FRAME <= ("1000", "0100","0000",'0',"0000");
wait for 100 ns;
DATA_FRAME <= ("1000", "0100","0101",'0',"0000");
wait for 100 ns;
DATA_FRAME <= ("1000", "0100","0100",'0',"0000");
wait; -- will wait forever
END PROCESS;
END TEST;
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho LÀM BOARD Cho ARDUINObởi NannaMấy ông tín đồ Adruino có kit có thể làm thử xem thế nào !
————————————————————————
skysmotor.co.uk bán các sản phẩm sau trực tuyến: động cơ bước, động cơ servo, trình điều khiển động cơ bước, hộp số hành tinh và có thể mua trực tuyến nếu cần.-
Channel: Kiến thức chung về chip khả trình
hôm nay, 15:12 -
-
bởi opthaianTrong quy trình sản xuất rượu, việc lựa chọn thiết bị chưng cất phù hợp không chỉ ảnh hưởng đến chất lượng thành phẩm mà còn quyết định hiệu quả kinh doanh lâu dài của mỗi xưởng sản xuất. Đặc biệt với các xưởng nhỏ, thách...
-
Channel: Góp ý cho diễn đàn
hôm nay, 12:00 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
Hôm qua, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -
-
Trả lời cho Làm thế nào để check IC LM358bởi thetungĐể check IC sống hay chết thì đơn giản : bạn lắp cái mạch ( khuếch đại hoặc dao động ) chạy bằng con IC đó ,nhưng vị trí IC thì lắp cái đế .... thế là cứ cắm rút thì biết . Còn không thì kiếm cái này : https://shopee.vn/Xu-M%C3%A1y-ki%E1%...di-%C4%91%E1%B...
-
Channel: Hướng dẫn tìm thông tin linh kiện
28-11-2025, 14:34 -
-
bởi ngochung90Tình hình là em có mua mạch 3s về để hàn vào khối pin 12v, hàn xong em đo tại các chân từ B-, B1, B2, B+ thì điện áp pin vẫn đủ 12,6v, nhưng tại 2 chân ra P- P+ thì đo chỉ được 6,3v là bị sao các bác, và chân P- P + này đồng thời là chân sạc xả thì mình cắm sạc xả cùng lúc được ko ạ
...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2025, 10:32 -
-
Trả lời cho Làm thế nào để check IC LM358bởi nguyendinhvanViệc đó tùy thuộc trình độ khoa học kỹ thuật công nghệ ứng dụng hiện tại thôi.
Trong datasheet,họ đưa ra nhiều thông số. Tùy theo khả năng , và những thông số họ cần, họ sẽ kiểm tra casc số đo có khớp với số liệu trong datasheet...-
Channel: Hướng dẫn tìm thông tin linh kiện
27-11-2025, 18:00 -
-
bởi kqbn9091Em có mạch AT89s8253 đang cần sửa số serial no của CHIP mà giờ lâu quá rồi không dùng keil nên không biết phải làm sao, trong khi chỉ còn file hex. Mạch nạp thì progris khi viết không sửa được số serial của IC. Rất cần bác nào còn làm về 89...
-
Channel: Vi điều khiển họ 8051
27-11-2025, 11:13 -

Comment