- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果可能的话,如何声明一个用于任何类型参数的函数 T
TRONG T
的唯一约束是它被定义为 1D mảng
giống
type T is array ( integer range <> ) of a_random_type;
哪里a_random_type
可以是任何kiểu
.
以下语法错误的函数是所需的示例
function measure_size_of_any_array ( a : array ( integer range <> ) ) return natural is
variable r : natural := 0;
begin
for i in a'range loop
r := r + 1;
end loop;
return r;
end function;
然后可以在任何 mảng
上使用
type natural_array is array ( integer range <> ) of natural;
type stdlogv_array is array ( integer range <> ) of std_logic_vector;
[...]
variable some_natural_array : natural_array;
variable some_stdlogv_array : stdlogv_array;
[...]
constant size_1 : natural := measure_size_of_any_array(some_natural_array);
constant size_2 : natural := measure_size_of_any_array(some_stdlogv_array);
显然,这个问题是关于定义函数的方式而不是关于函数本身:我不是在寻找a'length
.
TừAshenden's VHDL-2008: Just the New Stuff
Generic types can be specified for subprograms.
We can declare a formal generic type in a generic list in the following way:
type indentifier
A function with a generic list takes the form:
function indentifier
generic ( ... )
parameter ( ... ) return result_type is
... -- declarations
begin
... -- statements
end function identifier
这将允许以下定义
function measure_size_of_any_array
generic ( type arr_type )
parameter ( arr : arr_type );
以及以下用途
function measure_size_of_natural_array is new measure_size_of_any_array
generic ( arr_type => natural_array );
function measure_size_of_stdlogv_array is new measure_size_of_any_array
generic ( arr_type => stdlogv_array );
constant size_1 : natural := measure_size_of_natural_array(some_natural_array);
constant size_2 : natural := measure_size_of_stdlogv_array(some_stdlogv_array);
这提供了在不同调用之间共享函数体的所需行为,无论 mảng
的元素类型如何。但仍然需要一个实例化函数(可以根据需要在本地运行,所以还不错)。
由于主要供应商对 VHDL-2008 提供的支持很少(我尝试的编译器无法理解以前的解决方案),因此 VHDL-87、-93 或 -2002 解决方案将是首选。
前面的信息是我试图找到一种编写 VHDL 子程序的方法,该子程序接受任何参数,只要它是 mảng
(Ngay lập tức回答最初的问题)。预期的答案不一定要使用相同的方法(即使用 VHDL-2008 通用子程序)!
1 Câu trả lời
2008 年之前,仅允许在实体级别定义泛型。因此,您可以通过为该函数创建一个特殊实体来将泛型传递给该函数。例如
entity function_ent is
generic(return_value : natural);
port(output : out natural);
end entity;
architecture func_def of function_ent is
function measure_size_of_any_array return natural is
begin
return return_value;
end function;
begin
output <= measure_size_of_any_array;
end architecture;
但是,您希望将类型作为泛型参数传递...这是不可能的<2008。因此,您phải使用VHDL-2008。
但是在 VHDL 中使用泛型时,您始终必须将某个值(或在 vhdl-2008 中键入)映射到它们。没有智能(预)编译器能够像 C++ 那样自动检测输入类型。
当您最终决定使用 VHDL-2008 时,您可以问自己:“我是否会在不先定义数组的情况下使用该函数?”可能不会。因此,您可以使用通用(“模板化”)包作为与 C++ 类相当的东西。示例:
package array_pkg is
generic (type element_type);
type array_type is array (natural range <>) of element_type;
function measure_size_of_array(
arr : array_type) return natural;
end package;
package body array_pkg is
function measure_size_of_array(
arr : array_type) return natural is
begin
return arr'length;
end function;
end package body;
entity test is
end entity test;
library ieee;
architecture beh of test is
package natural_array_pkg is new work.array_pkg
generic map (element_type => natural);
signal test_sig1 : natural_array_pkg.array_type(0 to 10);
constant test_out1 : natural := natural_array_pkg.measure_size_of_array(test_sig1);
use ieee.std_logic_1164.all;
package slv_array_pkg is new work.array_pkg
generic map (element_type => std_logic_vector);
signal test_sig2 : slv_array_pkg.array_type(0 to 12)(5 downto 0);
constant test_out2 : natural := slv_array_pkg.measure_size_of_array(test_sig2);
begin
end architecture;
我认为这是最接近当前 VHDL 中的模板化参数。
关于VHDL - 适用于任何类型数组的函数/过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43324918/
Tôi đang cố gắng tạo một mảng chứa các mục int[][] tức là int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
Tôi có một mảng các số nguyên: private int array[]; Nếu tôi cũng có một phương thức gọi là add, thì sự khác biệt giữa: public void add(int value) { array[value
Khi bạn cố gắng thêm một mảng vào một mảng khác trong JavaScript, nó sẽ chuyển đổi mảng đó thành một chuỗi. Thông thường khi thực hiện việc này bằng ngôn ngữ khác, các danh sách sẽ được hợp nhất. JavaScript [1, 2] + [3, 4] = "
Theo hướng dẫn tôi đang đọc, nếu bạn muốn tạo một bảng có 5 cột và 3 hàng để biểu diễn dữ liệu như thế này... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...nó nói rằng bạn có thể sử dụng như sau
Tôi thường viết tập lệnh/chương trình bằng Python nhưng gần đây tôi bắt đầu lập trình bằng JavaScript và gặp một số vấn đề khi làm việc với mảng. Trong python, khi tôi tạo một mảng và sử dụng for x in y, tôi nhận được
Tôi có một mảng như thế này: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // Tôi muốn sử dụng toStr
rent_property (tên bảng) id fullName propertyName 1 A House Name1 2 B
Câu hỏi này đã có câu trả lời ở đây: Đã đóng cách đây 13 năm. Có thể trùng lặp: Trong mảng C tại sao điều này lại đúng? a[5] == 5[a] mảng[chỉ số] và
Sử dụng Excel 2013. Bài đăng đầu tiên của tôi sau nhiều năm tìm kiếm và chỉnh sửa. Tôi đang cố gắng khớp người dùng ứng dụng hiện tại (tức là "John Smith") với địa chỉ email "jsmith@work.com" của anh ấy. Sử dụng hai
apply dường như không lắp ráp lại mảng 3D khi chỉ hoạt động trên một lề. Hãy xem xét: arr 1), nhưng tôi vẫn thấy lạ rằng nếu một hàm trả về một đối tượng có kích thước, thì về cơ bản chúng sẽ bị bỏ qua. Câu trả lời tốt nhất là điều này hơi vô lý
Tôi có cơ sở dữ liệu MySQL chứa tọa độ GPS. Đây là một phần mã PHP của tôi để lấy tọa độ; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
Tôi cần tìm cách thực hiện thao tác này trong đó tôi có một mảng có dạng [batch_size, 150, 1] biểu diễn các chuỗi số nguyên batch_size, mỗi chuỗi dài 150 phần tử, nhưng trong mỗi chuỗi có rất nhiều số 0 được thêm vào để tất cả các chuỗi có cùng một
Tôi phải lấy văn bản thông qua json trong url. Hệ thống phân cấp như sau: đối tượng > mảng > đối tượng > mảng > đối tượng. Tôi muốn lấy văn bản bằng mã này. Nhưng tôi nhận được lỗi: org.json.JSONException: Không có giá trị
nhập mã ở đây- (void)viewDidLoad { NSMutableArray *imageViewArray = [[NSMutableArray alloc] init];
Bạn có biết cách thực hiện thao tác cắt trên mảng chuỗi 2 chiều, chẳng hạn như 3x3 và thu thập lại thành mảng 3x3 có cùng kích thước bằng cách sử dụng Java Stream API không? Vấn đề là tránh sử dụng vòng lặp for rõ ràng. Giải pháp hiện tại chỉ đơn giản là thực hiện một fo
Đã đóng. Sự cố này cần có thông tin chi tiết để gỡ lỗi. Hiện tại không chấp nhận câu trả lời. Chỉnh sửa câu hỏi để bao gồm hành vi mong muốn, một vấn đề hoặc lỗi cụ thể và
Tôi có đầu ra XML sau từ Dịch vụ Web ASP.NET: 1710 1711 1712 1713
Nếu tôi có một đối tượng todo như một phần của trạng thái của bạn và đối tượng đó chứa một mảng danh sách, bên trong danh sách có các đối tượng và bên trong các đối tượng đó có một mảng listItems khác. Làm thế nào để cập nhật đối tượng có id "poi098" trong mảng listItems
Tôi muốn đóng gói một mảng bool có độ dài tối đa là 8 vào một byte, gửi nó qua mạng rồi giải nén lại thành một mảng bool. Đã thử một số giải pháp ở đây nhưng không có hiệu quả. Tôi đang sử dụng mono. Tôi đã tạo BitArray, và sau đó thử
Chúng tôi có trường này trong cơ sở dữ liệu biểu thị cờ đúng/sai cho mỗi ngày trong tuần, như thế này: '1111110' Tôi cần chuyển đổi giá trị này thành một mảng boolean. Để thực hiện điều này, tôi đã viết đoạn mã sau: char[] freqs = weekday
Tôi là một lập trình viên xuất sắc, rất giỏi!