我的第一个FPGA小程序---测占空比
来源:互联网 发布:小岛秀夫离职原因知乎 编辑:程序博客网 时间:2024/05/17 20:27
modulecapt(clk,rst_n,//disabled,catin,PonTemp,Poff_reg);inputclk,rst_n,catin;outputPonTemp,Poff_reg;//reg[16:0] value;//output [7:0] segdata;//output [2:0] segcs;//reg[16:0]PonTemp;//PoffTemp;//char:256 max,data temp//reg[15:0]Pon,Poff;//首先对脉冲输入进行同步处理regsyn1;regsyn2;always @ (posedge clk)beginsyn1 <= catin;syn2 <= syn1;endwirecatin_pos;//获得输入脉冲的上升沿assigncatin_pos = syn1 & (~syn2);//计算高低电平宽度reg[16:0]Pon_reg,PonTemp,Poff_reg;wirereset = (~rst_n);always @ (posedge reset or posedge clk)beginif(reset) begin Pon_reg <= 16'd0;Poff_reg <= 16'd0;//Pon <= 16'd0;//Poff <= 16'd0; endelse if(catin_pos) begin//Pon <= Pon_reg;//Poff <= Poff_reg;if(Pon_reg !== 16'b0) PonTemp <= (((Pon_reg)*1000)/(Pon_reg+Poff_reg))+1;Pon_reg <= 16'd0;Poff_reg <= 16'd0; endelse if(syn1) begin Pon_reg <= Pon_reg + 1'b1; //fre_reg = Pon_reg + Poff_reg; endelse begin Poff_reg <= Poff_reg + 1'b1; //fre_reg = Pon_reg + Poff_reg; endend endmodulemodule SEG7( clk_50M, rst_n, singal_in, //tenvalue, segdata, segcs );input clk_50M,rst_n,singal_in;//wire[16:0] tenvalue;output [7:0] segdata;output [2:0] segcs;reg[24:0] count1ms,clk_100k;reg[31:0] count;reg clk1ms;wire[16:0] tenvalue;reg[2:0] number;reg[2:0] segcs;reg[7:0] segdata;wire rst_n;wire Pon_reg,Poff_reg;/* *获取1MS的信号 */always@(posedge clk_50M) begin if(count1ms>25'd1000_0)//1ms的时间 begin clk1ms<=~clk1ms; count1ms<=0; end else count1ms<=count1ms+1; endalways@(posedge clk1ms) begin if(count < 4'd5) count <= count+1'b1; else begincount <= 0;clk_100k <= ~clk_100k; end end/***********2进制转十进制函数*************/function[7:0] tendata;//返回一个4位的数字input[7:0] datain;begin case(datain) 4'b00000000: tendata=4'd0;//0 4'b00000001: tendata=4'd1;//1 4'bd00000010: tendata=4'd2;//2 4'b00000011: tendata=4'd3;//3 4'b00000100: tendata=4'd4;//4 4'b00000101: tendata=4'd5;//5 4'b00000110: tendata=4'd6;//6 4'bd00000111: tendata=4'd7;//7 4'b00001000: tendata=4'd8;//8 4'b00001001: tendata=4'd9;//9 4'b00001010: tendata=4'd10;// 4'b00001011: tendata=4'd11;// 4'b00001100: tendata=4'd12; 4'b00001101: tendata=4'd13; 4'b00001110: tendata=4'd14; 4'b00001111: tendata=4'd15; default:tendata=4'bzzzz_zzzz; endcaseendendfunction/*********十进制转LED段选函数*********/function[7:0] leddata;//返回一个8位的数字input[3:0] datain; begin case(datain) 4'd0: leddata=8'b11000000;//0 4'd1: leddata=8'b11111001;//1 4'd2: leddata=8'b10100100;//2 4'd3: leddata=8'b10110000;//3 4'd4: leddata=8'b10011001;//4 4'd5: leddata=8'b10010010;//5 4'd6: leddata=8'b10000010;//6 4'd7: leddata=8'b11111000;//7 4'd8: leddata=8'b10000000;//8 4'd9: leddata=8'b10010000;//9 4'd10: leddata=8'b10111111;//- 4'd11: leddata=8'b01111111;//. default:leddata=8'bzzzz_zzzz; endcase endendfunction/********扫描函数*************/always@(posedge clk_100k) begin if(number==5) number<=0; else begin number<=number+1; case(number) 4'd0: begin segdata<=leddata((tenvalue/10)%10);//个位 segcs<=3'b011; end 4'd1: begin segdata<=leddata((tenvalue/100)%10);//十位 segcs<=3'b010; end 4'd2: begin segdata<=leddata((tenvalue/1000)%10); //百位 segcs<=3'b001; end 4'd3: begin segdata<=leddata(tenvalue/10000);//千位 segcs<=3'b000; end 4'd4: begin segdata<=leddata(4'd11);//. segcs<=3'b101; end endcase endend capt mycapt(.clk(clk_50M),.rst_n(rst_n),//disabled,.catin(singal_in),.PonTemp(tenvalue)//.Poff_reg(Poff_reg));endmodule
学了几天的FPGA,终于要入门了,不过语法还不过关,这个verilog程序测占空比,在至芯ZX-2上测试成功,还有很多bug,先记录一下我此时菜的FPGA手法,哈哈哈哈!
0 0
- 我的第一个FPGA小程序---测占空比
- 24进制计数器 - 我的第一个FPGA程序
- 我的IBatisNet第一个小程序
- 我的第一个Python小程序
- 我的第一个JAVA小程序
- 我的第一个java小程序
- 我的第一个qt小程序
- 我的第一个Activiti小程序
- 我的第一个java小程序
- 我的第一个web小程序
- 第一个FPGA程序
- 我的第一个FPGA实验
- 我写的第一个小的程序
- 我的第一个显示动画的applet小程序
- 我的第一个Symbian小程序--Stack
- 我的第一个iphonet小程序诞生!
- 我的第一个小程序-----身份信息查询功能
- 01--初识java及我的第一个小程序
- Qt5.6_qml_C++插件
- iOS自己总结的超级详细分解富文本大全(AttributedString),图文混排很轻松
- python中的断言assert
- Scanner获取键盘输入
- 无
- 我的第一个FPGA小程序---测占空比
- java处理Excel
- CentOS安装后ifconfig 无法显示网卡
- android中String与InputStream之间的相互转换方式
- 二叉树中的DFS和BFS
- JS Location & History & Screen
- 【bzoj1005】 HNOI2008—明明的烦恼
- 和为S的连续正数序列
- 以声明方式在一个标题窗格内添加调色板的代码片段