用Verilog实现一个桶形移位器
来源:互联网 发布:php不支持mysql 编辑:程序博客网 时间:2024/04/29 03:19
实验六 桶型移位器
实验介绍
本实验使用Verilog语言设计实现一个32位桶型移位器。
实验目标
1. 使用ISE软件设计并进行仿真
2. 学会使用Modelsim
3. 理解桶型移位器原理,使用logicsim软件搭建一个8位的桶型移位器
4. 用verilog实现一个32位桶型移位器
实验原理
桶型移位器是一个多输入、单输出电路。对于输入a[31:0],移位器首先会根据aluc[1:0]值来确定做何种移位,然后根据b[4:0]的值来确定移多少位,最后将结果c[31:0]输出。
下表为aluc的值所对应的运算:
下图为桶型移位器的逻辑流程图,可根据其流程编写行为及的桶型移位器
Verilog代码
代码如下:
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 14:17:05 11/13/2015 // Design Name: // Module Name: barrelshifter32 // Project Name: // Target Devices: // Tool versions: // Description: //// Dependencies: //// Revision: // Revision 0.01 - File Created// Additional Comments: ////////////////////////////////////////////////////////////////////////////////////module barrelshifter32( input [31:0] a, // 32 位原始输入数据 input [4:0] b, // 5 位输入数据,控制移位的位数 input [1:0] aluc, // 2 位输入控制移位的方式 output reg [31:0] c // 32 位输出,由a 经过b 位通过aluc 指定的移位方式移位而得); reg [31:0] temp; always @ (a or b or aluc) begin case(aluc) 2'b00: begin temp = b[0] ? {{a[31]}, a[31:1]} : a; temp = b[1] ? {{2{temp[31]}}, temp[31:2]} : temp;// b = sext ? {{(32-WIDTH){a[WIDTH-1]}},a} : {32'b0, a}; temp = b[2] ? {{4{temp[31]}}, temp[31:4]} : temp; temp = b[3] ? {{8{temp[31]}}, temp[31:8]} : temp; temp = b[4] ? {{16{temp[31]}}, temp[31:16]} : temp; end 2'b01: begin temp = b[0] ? {32'b0, a[31:1]} : a; temp = b[1] ? {32'b0, temp[31:2]} : temp; temp = b[2] ? {32'b0, temp[31:4]} : temp; temp = b[3] ? {32'b0, temp[31:8]} : temp; temp = b[4] ? {32'b0, temp[31:16]} : temp; end 2'b10, 2'b11: begin temp = b[0] ? {{a[30:0]}, 1'b0} : a; temp = b[1] ? {{temp[29:0]}, 2'b0} : temp; temp = b[2] ? {{temp[27:0]}, 4'b0} : temp; temp = b[3] ? {{temp[23:0]}, 8'b0} : temp; temp = b[4] ? {{temp[15:0]}, 16'b0} : temp; end endcase c = temp; endendmodule
0 0
- 用Verilog实现一个桶形移位器
- quartusII中用Verilog实现移位的几种方式
- [转载]用verilog写一段代码,实现消除一个glitch
- verilog左移位宽增加?
- C语言实现一个循环移位函数
- 用硬件描述语言Verilog 设计一个抢答器
- 用Verilog实现电路分频
- 用+,-,移位实现除法运算
- 用移位实现除法操作
- 用+,-,移位实现除法运算
- 发一个用状态机实现的按键检测是VERILOG代码
- verilog中采用{}移位的理解
- Verilog HDL——移位运算符
- 用移位运算实现一个整数二进制形式的输出--简短程序分析
- verilog实现多位数值比较器
- Verilog HDL 出租车计费器实现
- 用verilog实现的串口通信模块
- 用verilog HDL实现LCD液晶显示代码
- Java逻辑运算符"&","&&","|","||"
- Mac下android开发环境的搭建
- OpenGL: 渲染管线理论详解
- 解决360浏览器打开xbap文件,提示下载问题
- UIScrollView的属性总结
- 用Verilog实现一个桶形移位器
- angularJS学习之路(二十七)---创建服务的五大方法---value
- DOM-JavaScript
- gcc常用参数
- spi协议及工作原理分析
- 让ImageView可以使用gif的方法
- mysql时间操作
- No17-【原】以后就是模板之家了
- C++标准库Vector & Iterator