在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4583|回复: 13

[求助] verilog代码求救

[复制链接]
发表于 2015-11-17 13:37:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
module  Rank(clk,x_input,ra0,rb0,rc0,rd0,ra1,rb1,rc1,rd1);
        input  clk;
        reg[3:0] state;
        input [7:0] x_input;
        output[7:0] ra0,rb0,rc0,rd0,ra1,rb1,rc1,rd1;
        reg[7:0] va,vb,vc,vd;
        reg[7:0] ra0,rb0,rc0,rd0,ra1,rb1,rc1,rd1;
        parameter
                  IDLE0='d0,IDLE1='d1,IDLE2='d2,IDLE3='d3,A='d4,B='d5,C='d6,D='d7,E='d8;
        always@(posedge clk)
        casex(state)
                     IDLE0:begin
                                 {va}={x_input};
                                 state<=IDLE1;
                                  end
                     IDLE1:begin
                                 {vb}={x_input};
                                 state<=IDLE2;  
                                 end
                     IDLE2:begin
                                 {vc}={x_input};
                                 state<=IDLE3;
                                 end
                     IDLE3:begin  
                                 {vd}={x_input};
                                 state<=A;
                                 {ra0,rb0,rc0,rd0}={va,vb,vc,vd};
                                 end
                     A:begin
                                sort2(va,vc);
                                state<=B;   
                                end
                     B:begin
                                sort2(vb,vd);
                                state<=C;
                                end
                     C:begin
                                sort2(va,vb);
                                 state<=D;
                                end
                     D:begin
                                sort2(vc,vd);
                                state<=E;
                                  end
                     E:begin     
                               sort2(vb,vc);
                               {ra1,rb1,rc1,rd1}={va,vb,vc,vd};
                               state<=IDLE0;
                               end
       default:state<=IDLE0;
       endcase
   task sort2;   
   inout[7:0] x,y;
   reg[7:0] tmp;
   if(x>y)
   begin
   tmp=x;
   x=y;
   y=tmp;
   end
   endtask
   endmodule


这是我在网络上看到的泡泡排序法程式码,但是身为新手的我实在看不懂,虽然我知道是用状态机写成但是他的写法跟书上看到的状态机写法不大相同。举个例来说
                            IDLE0:begin
                                 {va}={x_input};
                                 state<=IDLE1;
                                  end
                                  一般的状态机是用IF判断但是他并没有这么做
                           可以告诉我这段的意思是什么吗?
另外
      A:begin
                                sort2(va,vc);
                                state<=B;   
                                end
中的sort2(va,vc)是代表什么呢
发表于 2015-11-17 15:59:24 | 显示全部楼层
sort2就是如果x>y,x,y交换位置。
不是说状态机一定要有if判断。
这个状态机前4个idle状态传进来4个数,a、b、c、d。
然后比较a、c,把两者之间小的数放在a里;比较b、d,把小的数放在b里;
第一轮比较完毕,a、b存放两个较小的数,b、d中存放两个较大的数,
然后a、b再比较大小,c、d再比较大小,这样就得到a、b、c、d依次变大的排列了
 楼主| 发表于 2015-11-17 18:11:09 | 显示全部楼层
本帖最后由 as0920 于 2015-11-17 18:19 编辑

回复 2# haimo

IDLE0:begin
                                 {va}={x_input};
                                 state<=IDLE1;
抱歉请问这个IDLE 0是在什么条件下会变成IDLE1的状态呢?
{va}={x_input};   时IDLE 0变IDLE 1吗?


另外,请问为什么我在verilog书中都没找着sort这个指令呢
发表于 2015-11-17 18:30:20 | 显示全部楼层
不严格的书写习惯很容易导致综合后的硬件功能与设计功能不一致。建议代码规范。
  
对于冒泡的方法: 一般采用找前导0或1的方法。 依次检出数据。采用流水线结构。很多仲裁逻辑采用。
发表于 2015-11-17 18:58:05 | 显示全部楼层
这个代码可以综合吗?待会去试试
 楼主| 发表于 2015-11-17 21:07:34 | 显示全部楼层
回复 5# 谁枫而飘


    我用vivado是可以綜合的
 楼主| 发表于 2015-11-17 21:09:05 | 显示全部楼层
回复 4# murphy522


    所以你的意思是这段代码是不好的吗?
发表于 2015-11-17 23:36:13 | 显示全部楼层

标题

回复 3# as0920
这种是最简单的状态机,中间没有条件转移,也就是你说的if判断。
sort是自己定义的一个任务task ,和c里的函数调用类似,找本书看看函数和任务那一章,应该都有讲的。
还有这个不是冒泡排序法,也不推荐使用这种结构,数据输入完要等4个时钟周期才能输出排序的数据,一般都要立刻输出的。
发表于 2015-11-17 23:38:58 | 显示全部楼层
这种没复位没使能信号的编码风格确实不好
发表于 2015-11-18 15:01:19 | 显示全部楼层
回复 7# as0920


    该代码对于 Altera 或者 XILINX 的综合工具将是一个极大的挑战。很容易综合成错误的逻辑。 FPGA厂家都给出了应该如何书写规范的代码示例,以便于综合器很准确的实现设计者的意图。换句话说这代码写的相当的烂!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-28 19:37 , Processed in 0.024106 second(s), 9 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表