- 人工智能硬件电路设计基础及应用
- 廖永波编著
- 841字
- 2022-05-06 17:41:40
4.3 16位桶形移位器
本示例设计的是16位桶形移位器,可实现对16位输入信号的循环左移、循环右移、逻辑左移、逻辑右移、算术左移和算术右移这6种操作。移位器的功能选择由模式输入信号决定。移位器将循环左移、循环右移、逻辑左移、逻辑右移、算术左移和算术右移这6种操作,分别定义为“001”模式、“010”模式、“011”模式、“100”模式、“101”模式和“110”模式。对于“000”模式和“111”模式,移位器输出进入高阻态。比如,移位器的16位输入数据为“1011011101001000”,模式输入为“001”,即循环左移,移位量为2,那么,输出信号为“1101110100100010”。
本示例的VHDL代码如下。代码在实体内预定义了移位器的6种状态码。在结构体内使用when赋值语句实现移位模式的选择。代码中的my_rol、my_ror、my_sll、my_srl、my_sla和my_sra是自定义的移位函数,分别可以实现对unsigned数据的循环左移、循环右移、逻辑左移、逻辑右移、算术左移和算术右移。本示例使用模块化的设计,以上移位函数的定义被放置在work库的shifter_pkg包集内,调用时只需在VHDL文件头部声明该包集即可。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_105_2.jpg?sign=1739044436-oB1fusJdTNayrDWE6gCd4rHpzKMUAJUv-0-80a5af9c97a26cfd73125998c5a64fa5)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_106_1.jpg?sign=1739044436-zxU50Az6EIX6W3N4JhWrtLQfDv86lFQq-0-2110c09662b06f6ff7e7c3b02363ecae)
包集shifter_pkg的VHDL代码如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_106_2.jpg?sign=1739044436-RTLUJAK20gDL4re5b1VJl3dc4DgslpYn-0-8495d4a0e25fa9b9f210b0a37a4a8cd9)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_107_1.jpg?sign=1739044436-LZuxN7wiJMvYJ4cUz48EymvSApu8IikH-0-9e98e18da5e73bcc269b8a81f5d2eced)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_108_1.jpg?sign=1739044436-XbRL19Hf1E6eDaiAvLiMu6A4akrAbBB9-0-36e44ec4355d30d29e2b8a256d6880d8)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_109_1.jpg?sign=1739044436-I3bwjtRnQh48Apb49rWhLFRl28RIUdM4-0-6fbb0620e6a2fe19aea034df72ef99b5)
图4.4是16位桶形移位器的仿真结果。仿真可每10ns分为一个时间段,共10个时间段。16位输入数据为“1011011101001000”。第1个时间段,模式输入为“000”,即无效模式,输出进入高阻态。第2个时间段,模式输入为“001”,即循环左移,移位量为0,输出与输入数据相同。第3个时间段,模式输入为“001”,即循环左移,移位量为5,输出为“1110100100010110”。第4个时间段,模式输入为“001”,即循环左移,移位量为2,输出为“1101110100100010”。第5个时间段,模式输入为“010”,即循环右移,移位量为2,输出为“0010110111010010”。第6个时间段,模式输入为“011”,即逻辑左移,移位量为2,输出为“1101110100100000”。第7个时间段,模式输入为“100”,即逻辑右移,移位量为2,输出为“0010110111010010”。第8个时间段,模式输入为“101”,即算术左移,移位量为2,输出为“1101110100100000”。第9个时间段,模式输入为“110”,即算术右移,移位量为2,输出为“1110110111010010”。第10个时间段,模式输入为“111”,即无效模式,输出进入高阻态。仿真结果验证了设计的正确性。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_109_2.jpg?sign=1739044436-6V0vAUVa6VTsqov5S5rHzfJQPy2uwMVm-0-474177e26d6bbb39ebd091af768ef508)
图4.4 16位桶形移位器的仿真结果