我有以下代码,我正在尝试通过使用循环来使其更专业。
ENTITY cc IS
PORT ( s, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, y0, y1, y2, y3, y4, y5, y6, y7, y8, y9 : IN BIT;
m0, m1, m2, m3, m4, m5, m6, m7, m8, m9 : OUT BIT );
END cc;
ARCHITECTURE cc_logic OF cc IS
BEGIN
m0 <= (NOT(s) XOR x0) XNOR (s OR y0) ;
m1 <= (NOT(s) XOR x1) XNOR (s OR y1) ;
m2 <= (NOT(s) XOR x2) XNOR (s OR y2) ;
m3 <= (NOT(s) XOR x3) XNOR (s OR y3) ;
m4 <= (NOT(s) XOR x4) XNOR (s OR y4) ;
m5 <= (NOT(s) XOR x5) XNOR (s OR y5) ;
m6 <= (NOT(s) XOR x6) XNOR (s OR y6) ;
m7 <= (NOT(s) XOR x7) XNOR (s OR y7) ;
m8 <= (NOT(s) XOR x8) XNOR (s OR y8) ;
m9 <= (NOT(s) XOR x9) XNOR (s OR y9) ;
END cc_logic ;
这可能吗?
答案 0 :(得分:5)
包含standard
的{{1}}包也有bit
,因此如果是界面
可以改为使用向量而不是单个位,然后代码可以
为VHDL-2002编写的:
bit_vector
请注意,ENTITY cc IS
PORT ( s : IN BIT;
x : IN BIT_VECTOR(0 TO 9);
y : IN BIT_VECTOR(0 TO 9);
m : OUT BIT_VECTOR(0 TO 9));
END cc;
ARCHITECTURE cc_logic OF cc IS
BEGIN
loop_gen : FOR idx IN m'RANGE GENERATE
m(idx) <= ((NOT s) XOR x(idx)) XNOR (s OR y(idx));
end generate;
END cc_logic;
已更改为NOT(s)
,因为假设是(NOT s)
意图和外部XOR
时的逻辑操作是等效的。
也可以在没有生成循环的情况下编写体系结构:
ARCHITECTURE cc_logic OF cc IS
SIGNAL s_vec : BIT_VECTOR(0 to 9);
BEGIN
s_vec <= (OTHERS => s);
m <= ((NOT s_vec) XOR x) XNOR (s_vec OR y);
END cc_logic;
如果使用的工具支持VHDL-2008,那么您甚至可以减少它 更多:
ARCHITECTURE cc_logic OF cc IS
BEGIN
m <= ((NOT s) XOR x) XNOR (s OR y);
END cc_logic;
最后,您可以考虑使用std_logic
和std_logic_vector
代替。{
bit
和bit_vector
,因为std_logic
中的其他状态
当输入数据未知时,模拟更准确。