完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 美丽时光2017 于 2017-6-7 11:35 编辑
自己写的小模块,不足之处敬请指教! /* 编码器输入模块(增量型A,B,Z) */ module ENCODER( input clock, //时钟接入50Mhz input reset, //复位 output ready, //1=就绪; input in_a, //A相 input in_b, //B相 input in_z, //Z相 output[31:0] count //编码器输出 ); parameter b1=1'b1, b0=1'b0, dt=4'd10;//内部复位周期 //-----------稳定的输入-4周期-12.5Mhz最高输入--------------------------------------------- wire aas,bbs; reg aa0,aa1,aa2,aa3,bb0,bb1,bb2,bb3; always @ (negedge reset or posedge clock) begin if(!reset)begin aa0<=b0;aa1<=b0;aa2<=b0;aa3<=b0; bb0<=b0;bb1<=b0;bb2<=b0;bb3<=b0; end else begin aa0<=in_a; aa1<=aa0; aa2<=aa1; aa3<=aa2; bb0<=in_b; bb1<=bb0; bb2<=bb1; bb3<=bb2; end end assign aas= aa0&aa1&aa2&aa3; assign bbs= bb0&bb1&bb2&bb3; //---------锁定方向----------------------------------------- reg ABT,DIR; always @ (negedge reset or posedge clock) begin if(!reset)begin ABT<=b0; DIR<=b0;end else begin if(!ABT)begin if(aas)DIR<=b0;//A相锁定"+"正方向 if(bbs)DIR<=b1;//B相锁定"-"负方向 ABT<=b1; end if(!aas & !bbs)begin ABT<=b0; DIR<=b0; end end end //----------模块就绪---------------------------------------------------- reg[3:0]cnt; always @ (negedge reset or posedge clock) begin if(!reset)cnt<=b0; else cnt<=(cnt end assign ready= (cnt==dt);//就绪=1; //---------编码器位置测量--正负计数---------------------------------------------- counter AB ( .clock (clock), .reset (ready), .pul ({DIR,aas|bbs}),//{方向,信号A | 信号B} .counter (count) //计数输出 ); endmodule
评分
|
||
相关推荐
|
||
比较基础了
|
|
|
|
|
|
1476 浏览 1 评论
1266 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1471 浏览 0 评论
920 浏览 0 评论
2272 浏览 0 评论
1450 浏览 35 评论
5637 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 14:57 , Processed in 0.439809 second(s), Total 46, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号