搜索
bottom↓
回复: 8

新手求救:一个简单的移位函数都编不过,求助啊

[复制链接]

出0入0汤圆

发表于 2010-5-23 16:52:24 | 显示全部楼层 |阅读模式
我学数电的时候涉及到这个,想写个小程序,但怎么也编不过!我知道对大家很简单,麻烦写两句吧
module roundshift(result,order,origindata);
input [16:1]origindata;
input [4:1]order;
output [16:1]result;
wire shift;
assign shift=order;
for(shift;shift>=0;shift--)
assign result={origindata[15:1],origindata[16]};
endmodule

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-5-23 17:01:23 | 显示全部楼层
补充一下:  错误提示
Info: Command: quartus_map --read_settings_files=on --write_settings_files=off roundshift -c roundshift
Error (10170): Verilog HDL syntax error at roundshift.v(7) near text "for";  expecting an identifier ("for" is a reserved keyword ), or "endmodule", or a parallel statement
Error (10170): Verilog HDL syntax error at roundshift.v(8) near text "}";  expecting ";", or ","
Error (10112): Ignored design unit "roundshift" at roundshift.v(1) due to previous errors
Info: Found 0 design units, including 0 entities, in source file roundshift.v
Error: Quartus II Analysis & Synthesis was unsuccessful. 3 errors, 0 warnings
        Error: Peak virtual memory: 194 megabytes
        Error: Processing ended: Sun May 23 16:45:32 2010
        Error: Elapsed time: 00:00:02
        Error: Total CPU time (on all processors): 00:00:01
Error: Quartus II Full Compilation was unsuccessful. 5 errors, 0 warnings

出0入0汤圆

发表于 2010-5-23 17:20:05 | 显示全部楼层
wire shift
这个变量是一个一位的线性变量不能够利用4位的线型变量来赋值

出0入0汤圆

发表于 2010-5-23 18:04:25 | 显示全部楼层
for(shift;shift>=0;shift--)
  verilog语言中不支持--,要使用shift=shift-1

出0入0汤圆

发表于 2010-5-23 21:19:32 | 显示全部楼层
咳。移位就直接<<或>>嘛。for只能在always块内使用,用于复制电路;用在其他地方则无法综合。


----------------------------------------
流水灯小例
----------------------------------------
module rider_led(
  input        CLOCK_50,                // 板载时钟50MHz
  input        Q_KEY,                   // 板载按键RST
  output [8:1] LED                      // LED[1] ~ LED[8]
);   

//++++++++++++++++++++++++++++++++++++++
// 分频部分 开始
//++++++++++++++++++++++++++++++++++++++
reg [23:0] cnt;                         // 计数子

// 溢出后自动重新计数
always @ (posedge CLOCK_50, negedge Q_KEY)
  if (!Q_KEY)
    cnt <= 0;
  else
    cnt <= cnt + 1'b1;
  
wire led_clk = cnt[23];                 // 每(2^24/50M = 0.3355)sec取一次
//--------------------------------------
// 分频部分 结束
//--------------------------------------


//++++++++++++++++++++++++++++++++++++++
// 跑马灯部分 开始
//++++++++++++++++++++++++++++++++++++++
reg [8:1]  led_r;                       // 定义输出寄存器
reg        dir;                         // 循环方向控制;上电缺省值为0

always @ (posedge led_clk, negedge Q_KEY)
  if (!Q_KEY)                           // 复位后右移
    dir <= 0;                           
  else
    // 到达左右端点否?到达则换向
    if(led_r[7])                        // led_r == 8'h40
      dir <= 1;     
    else if(led_r[2])                   // led_r == 8'b02
      dir <= 0;

always @ (posedge led_clk, negedge Q_KEY)
  if (!Q_KEY)                           // 复位后右移
    led_r <= 8'h01;         
  else
    // 根据dir,左右移位
    // 注意LED实际以为方向与led_r移位方向相反
    // 因为开发板上LED[1]在左,LED[8]在右
    if(!dir)
      led_r <= led_r << 1;              // LED右移
    else   
      led_r <= led_r >> 1;              // LED左移

// 为什么要取反?
// 因为开发板上的LED是送0亮,送1灭
assign LED = ~led_r;                    // 寄存器输出
//--------------------------------------
// 跑马灯部分 结束
//--------------------------------------

endmodule

出0入0汤圆

 楼主| 发表于 2010-5-23 22:41:52 | 显示全部楼层
回复【4楼】tear086 .COM 缺氧
-----------------------------------------------------------------------
谢谢!
-_-!  嘿嘿   原来for还有这种讲究
我刚学  所以很多东风没法从c那种编程语言转换到描述语言,一时很难适应啊
又没人教  只能试了  
万分感谢

出0入0汤圆

 楼主| 发表于 2010-5-23 22:42:30 | 显示全部楼层
回复【2楼】tiancaigao7 天才杨威利
-----------------------------------------------------------------------

这个明白
谢谢!

出0入0汤圆

 楼主| 发表于 2010-5-23 22:45:42 | 显示全部楼层
回复【3楼】sk_dlmu
-----------------------------------------------------------------------
谢谢! 突然想起我看过这一条  不过没放心上
C后遗症啊

出0入0汤圆

发表于 2010-5-24 12:34:28 | 显示全部楼层
在Verilog综合时,for语句会被展开,也就是逻辑块的复制。楼主可以写一个简单的程序,然后综合看看RTL图,就可以理解。
所以在Verilog综合时,for语句是要谨慎使用的。
verlog HDL不像C,代码简洁不等于电路简洁。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表