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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8152|回复: 10

[求助] 初学verilog: generate该如何使用,case总显示出错

[复制链接]
发表于 2011-3-29 07:58:10 | 显示全部楼层 |阅读模式

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

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

x
module StructuralAccumulator(
   Clock,
   ClockEnable,
   Reset,
   Set,
   //------------------------------------------------------------------
   
   //------------------------------------------------------------------
   // Input Interface
   //------------------------------------------------------------------
   A,
   ALUOp,
   //------------------------------------------------------------------
   
   //------------------------------------------------------------------
   // Output Interface
   //------------------------------------------------------------------
   Result
   //------------------------------------------------------------------
);
//--------------------------------------------------------------------------
// Parameters
//--------------------------------------------------------------------------
parameter  Width =       1;
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
// Clock and Reset Inputs
//--------------------------------------------------------------------------
input wire          Clock, ClockEnable, Reset, Set;
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
// Inputs
//--------------------------------------------------------------------------
input wire  [Width-1:0]      A;
input   [2:0]       ALUOp;
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
// Outputs
//--------------------------------------------------------------------------
output wire  [Width-1:0]      Result;
//--------------------------------------------------------------------------

wire [Width-1:0] aluout;
genvar i;

generate for (i=0; i < Width; i=i+1)
begin: bit
FDRSE #(
.INIT(1'b0) // Initial value of register (1’b0 or 1’b1)
) FDRSE_inst (
.Q(Result[i]), // Data output
.C(Clock), // Clock input
.CE(ClockEnable), // Clock enable input
.D(aluout[i]), // Data input
.R(Reset), // Synchronous reset input
.S(Set) // Synchronous set input
);
case(ALUOp)
3'b000: assign aluout[i] = A[i] + Result[i];
3'b001: assign aluout[i] = A[i] - Result[i];
3'b010: assign aluout[i] = A[i] & Result[i];
3'b011: assign aluout[i] = A[i] | Result[i];
3'b100: assign aluout[i] = A[i] ^ Result[i];
3'b101: assign aluout[i] = ~A[i];
3'b110: assign aluout[i] = A[i];
default: assign aluout[i] = A[i];
endcase

end

  endgenerate
  
//--------------------------------------------------------------------------
endmodule

最终,程序总是显示在 case(ALUOp)里显示Illegal expression in generate case statement。不知道如何解决,另外,generate应该如何是使用,谢谢。
发表于 2011-3-29 08:13:05 | 显示全部楼层
多看看英文原版的规范。不要看中文的
 楼主| 发表于 2011-3-29 08:26:35 | 显示全部楼层
是不是case一定要在always@(ALUOp)下才能工作?Case 不能用在Structural里面用吗?
发表于 2011-3-29 10:54:55 | 显示全部楼层
你先把generate不谈,这个case语句写得不完整啊,自然会报错。
你可这样理解,本来是个完整的语句段,该有什么本来有什么,然后你在前面和后面加个generate/ end generate,用一个变量i代替里面原来的某常量,这样程序自动帮你展开成8段而已。
发表于 2011-3-29 13:03:03 | 显示全部楼层
case语句应该是过程性语句,不能用在这个地方。
发表于 2011-3-29 16:17:48 | 显示全部楼层
case前加个always@(*)试下
发表于 2011-3-31 20:08:53 | 显示全部楼层
你是用什么工具编译的?
你是不是没打开工具对verilog2001的支持选项啊。
我编译了下没问题。
发表于 2011-6-10 11:16:56 | 显示全部楼层
我正在学习中,目前正要用generate
发表于 2012-4-10 16:01:56 | 显示全部楼层
结果如何?正在学习中
发表于 2012-4-28 10:25:54 | 显示全部楼层
以后只看英文的规范。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-5-29 13:09 , Processed in 0.028278 second(s), 9 queries , Gzip On, MemCached On.

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