免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4459 | 回复: 20

求助 简单状态机 [复制链接]

论坛徽章:
0
发表于 2010-12-29 13:43 |显示全部楼层
本帖最后由 jimmyixy 于 2010-12-29 13:49 编辑

同时监听两个信号A,B
如果A先到B后到 stat = 1;
如果B先到A后到 stat = 2;
死循环监听

用verilog时遇到的问题,流程上跟c不太一样。
懂的朋友指教下 谢谢。
补充:
先到后到的意思是上升沿触发

论坛徽章:
0
发表于 2010-12-29 14:55 |显示全部楼层
懂的朋友指教下

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-12-29 15:10 |显示全部楼层
本帖最后由 cjaizss 于 2010-12-29 15:31 编辑

晕,发在C版
硬件没有死循环这一说
reg A1;
reg B1;
always@(negedge nrst or posedge clk)
if(!nrst) begin
     A1<=1'b1;
      B1<=1'b1;
    end
else  begin
     A1<=A;
      B1<=B;
    end

always@(negedge nrst or posedge clk)
if(!nrst) begin
...
end
else begin
  ...
if(A&(!A1))
  stat <= 1;
else if(B&(!B1))
   stat<=2;
...
end

补充说明一下:这是RTL的,不是仿真的,仿真的可以简单的多

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-12-29 15:14 |显示全部楼层
晕,发在C版
硬件没有死循环这一说
reg A1;
reg B1;
always@(negedge nrst or posedge clk)
if(!nrst)  ...
cjaizss 发表于 2010-12-29 15:10



    同时上沿,A优先

论坛徽章:
0
发表于 2010-12-29 15:32 |显示全部楼层
回复 4# cjaizss
  1. module kncounter (DINA, DINB, DINC, CLR, COUT);
  2. input CLR, DINA, DINB, DINC;
  3. output[31:0] COUT;
  4. reg[31:0] COUT;
  5. reg[1:0] STAT;
  6. initial begin
  7. assign STAT = 2'b00;
  8. end

  9. parameter Add = 2'b10, Sub = 2'b01, Jmp = 2'b11;
  10. always @(posedge CLR)
  11. begin
  12.         COUT <= 0;
  13. end
  14. always @(posedge DINA or posedge DINB)
  15. begin
  16.         if(DINA)
  17.                 begin
  18.                         STAT = (STAT | Add) ;                               
  19.                 end
  20.         if(DINB)
  21.                 begin
  22.                          STAT = (STAT | Sub);
  23.                 end
  24.         case(STAT)
  25.                 Add: begin
  26.                                 COUT = COUT + 1;
  27.                                 STAT = 2'b11;
  28.                         end       
  29.                 Sub: begin
  30.                                 COUT = COUT - 1;
  31.                                 STAT = 2'b11;
  32.                         end
  33.                 Jmp: begin
  34.                                 STAT = 2'b00;
  35.                         end
  36.         endcase
  37. end
  38. endmodule
复制代码
ERROR:Xst:899 - kncounter.v line 25: The logic for <STAT> does not match a known FF or Latch template.
ERROR:Xst:899 - kncounter.v line 25: The logic for <COUT> does not match a known FF or Latch template
斑竹大大看看我这个为啥报这个错啊?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-12-29 15:40 |显示全部楼层
回复  cjaizss ERROR:Xst:899 - kncounter.v line 25: The logic for  does not match a known FF or Latch ...
jimmyixy 发表于 2010-12-29 15:32



    以后有问题到我的CPU版去发吧,在C版回这个挺搞的.
又是这个posedge又是那个posedge的,你能想的出来你的这个硬件长什么样的吗?
  可能你是初学者,不太会写RTL可综合的代码,建议先从用门电路来搭建你需要的电路,要做到写verilog的时候就可以在脑子里面把这个电路给编译出来,你这个电路完全编译不出来.

论坛徽章:
0
发表于 2010-12-29 15:48 |显示全部楼层
回复 6# cjaizss


    我纯属赶鸭子上架,verilog刚学两天。
做这个的原因是我们的旋转编码器频率太高电脑处理不过来
想把计数这部分弄到FPGA板子上。
手头上有块xilinx的古董,所以就……
要不您给指点下这可逆计数器的框架吧

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-12-29 15:50 |显示全部楼层
以后有问题到我的CPU版去发吧,在C版回这个挺搞的.
又是这个posedge又是那个posedge的,你能想的出 ...
cjaizss 发表于 2010-12-29 15:40



    我一向觉得学习数字设计直接从verilog学起很不好,真的很不好.完全不明白数字设计的原理,那么后面的复杂设计根本是做不了了.建议,还是从门电路搭建开始学起,先用verilog把dff,latch,tff,and,or,Decoder, Encoder, MUX,comparator...搭一编再说

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-12-29 15:50 |显示全部楼层
本帖最后由 cjaizss 于 2010-12-29 15:52 编辑
回复  cjaizss


    我纯属赶鸭子上架,verilog刚学两天。
做这个的原因是我们的旋转编码器频率太高电 ...
jimmyixy 发表于 2010-12-29 15:48



    那我觉得你八成短期搞不定这个项目,数字设计可比C语言难入门多了

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-12-29 15:55 |显示全部楼层
本帖最后由 cjaizss 于 2010-12-29 15:58 编辑

不过如果你的功能只需要如此简单,那么
我倒可以说一下
我先把你刚才代码的问题说一下:
主要有两个:
1.这么多时钟供给一个latch/ff,这是不可能的
2.多处信号驱动一个寄存器
你先把你的功能说说吧,我帮你改一下

评分

参与人数 1可用积分 +1 收起 理由
davelv + 1 好人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP