名称:基于FPGA的角谷猜想的实现设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
角谷猜想的实现:
如果n为奇数,则3n+1;
如果n的偶数,则n/2;
最后n=1。
要求:
1.输入一个16位二进制数(用状态机来控制,用计数器记循环次数)
2.写出来的代码要为可综合电路
结果要包括:
1.输入二进制数判断奇偶后是否为3n+1或n/2
2.最后是否回到1
3.循环次数m的具体值
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序代码
3. 程序编译
4. Testbench代码
5. 仿真图
部分代码展示:
module jiaogu_test( input clk,//时钟 input enable,//使能信号 input [15:0] data_in,//输入16bit数据 output reg [15:0] result,//输出最终结果 output reg flag,//完成信号 output reg [15:0] cycle//循环次数 ); reg [2:0] state=3'd0;//状态寄存器 reg [17:0] temp=18'd0;//数据存储器 always@(posedge clk) case(state) 3'd0://起始状态 if(enable==1)//启动 state<=3'd1; else state<=3'd0; 3'd1://启动状态 begin state<=3'd2; flag<=0; temp<=data_in;//加载原数据 result<=0; end 3'd2://循环状态 if(temp==1)//结果为1 state<=3'd5;//结束 else if(temp[0]==0) state<=3'd4;//奇数 else state<=3'd3;//偶数 3'd3://奇数状态 begin state<=3'd2; temp<=temp*3+1;//奇数时 end 3'd4://偶数状态 begin state<=3'd2; temp<=temp/2;//偶数时 end 3'd5://完成状态 begin state<=3'd0; flag<=1;//输出循环完成信号 result<=temp;//生输出结果 end default:; endcase always@(posedge clk) if(state==3'd1) cycle<=0;//清零 else if(state==3'd2) cycle<=cycle+1;//循环次数 endmodule
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=875
阅读全文
135