Liệu các tuyên bố q < = q; cần thiết?
Không, và trong trường hợp ASIC, nó thực sự có thể làm tăng diện tích và mức tiêu thụ điện năng. Tôi không chắc chắn như thế nào hiện đại FPGAs xử lý này. Trong quá trình tổng hợp, công cụ sẽ thấy câu lệnh đó và yêu cầu q được cập nhật trên mọi cạnh đồng hồ tích cực. Nếu không có mệnh đề cuối cùng khác, công cụ này miễn phí chỉ cập nhật q
bất cứ khi nào các điều kiện nhất định được đáp ứng.
Trên ASIC, điều này có nghĩa là công cụ tổng hợp có thể chèn một cổng đồng hồ (miễn là thư viện có một) thay vì mux. Đối với một DFF đơn, điều này thực sự có thể tồi tệ hơn vì một cổng đồng hồ thường lớn hơn nhiều so với một mux nhưng nếu q
là 32 bit thì tiết kiệm có thể rất quan trọng. Các công cụ hiện đại có thể tự động phát hiện nếu số lượng DFF sử dụng một phép chia sẻ thỏa mãn một ngưỡng nhất định và sau đó chọn một cổng đồng hồ hoặc mux phù hợp.
Trong trường hợp này công cụ cần 3 muxes cộng thêm việc định tuyến
always @(posedge CLK or negedge RESET)
if(~RESET)
COUNT <= 0;
else if(INC)
COUNT <= COUNT + 1;
else
COUNT <= COUNT;
Dưới đây công cụ sử dụng một cổng đồng hồ duy nhất cho tất cả các DFFs
always @(posedge CLK or negedge RESET)
if(~RESET)
COUNT <= 0;
else if(INC)
COUNT <= COUNT + 1;
Images from here
Nguồn
2012-06-13 14:47:25
Có lẽ bạn được yêu cầu đặt kết quả đầu ra trong trường hợp _all_? – paxdiablo