TA的每日心情 | 开心 2019-12-2 15:01 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我使用Quartus II64-Bit Version 13.1.0 Build 162 Full Version对一个工程进行编译,但是综合阶段报错。# P* m& Z- K( y3 x* o
源码如下:
; }) Y, `; {! ]" o1 E4 J/* a# T" [3 L X9 H* E
该模块是将计数器32bit计数值通过一个Byte从低位依次传给mcu
! `+ f6 A" U# j0 S8 N+ Z o. X& O' a*/% c4 [) P9 V T2 r) a
module Data_Out ( reset, Data_Ready, Counter_Data, Data_Update, Data_Bus ); o& r+ m4 O; V
/ ?! A' L5 k0 d% x3 `input reset; //复位信号,低电平有效5 v2 d& y% D. Q4 l
input Data_Update; //MCU通过Data_Update通知FPGA可以更新Data_Bus: N, D2 e& P7 f9 `- T# L/ n
input [31:0] Counter_Data; //32bit计数器输出的计数值2 H) U x8 M) W( D6 ]
output Data_Ready; //FPGA通知MCU已经更新Data_Bus
) O& t5 C4 P) ~1 O0 D- C- foutput [7:0] Data_Bus; //连接到MCU的数据总线。
2 L% E; E* m9 u* \4 i" O' I) S3 C" X; a7 _
reg [2:0] Data_Order; //控制数据总线更新的状态标志& [7 y& l Q: H9 ~( _. }
wire [7:0] data0; //Counter_Data[7:0]2 O' z! s7 O R6 w1 ]
wire [7:0] data1; //Counter_Data[15:8]
0 ~9 _4 R2 Z8 _9 Iwire [7:0] data2; //Counter_Data[23:16] L" s* B) I9 X
wire [7:0] data3; //Counter_Data[31:24]4 V' v3 e4 a( [
& S( A; W B; e. n. E% q
/*将32bit数据Counter_Data分4个字节分别送给data0~data3*/! r! x* @% o# @3 d$ {& U
assign data0 = Counter_Data [7:0];! L) l, I0 L+ k O4 Z& ~5 T
assign data1 = Counter_Data [15:8];
) y8 @; \; f0 ]1 Gassign data2 = Counter_Data [23:16];* _/ z2 M) ~7 k
assign data3 = Counter_Data [31:24];; O+ o' I3 b5 P: O( P9 C, [' U
: y& K3 r7 L" O5 ?0 T& m
/*根据reset和Data_Update,更新Data_Order*/# [& C0 b6 E8 d" ^5 R
always @( negedge reset or Data_Update )
- P7 o; m; J/ d3 L1 r% \$ l1 a begin
- _$ {2 Y x% K2 M2 y$ t if ( reset == 0 ) //reset有效,清零Data_Order。) ^ K5 D2 ]% T `( E
begin
" I; q* q0 \ |$ p# k' @ Data_Order <= 3'b000;
" t2 O& Q1 e: K/ ?+ A. h! P end, w/ r5 J8 e* }& {: q/ u& L' s
else if ( Data_Update == 1 ) //Data_Update为高电平,则对Data_Order 更新5 A2 U6 b3 V# k: Q+ R4 f/ d3 I0 l
begin
! d, } x7 r! [! \! R/ Z( X! [! I Data_Order <= Data_Order + 3'b001;" ?% ~; B$ e" R+ v+ D
if ( Data_Order == 3'b100 ) //Data_Order 已经到达最后状态,更新到第一个状态
& U+ j! Q- j; w begin" t" d( [( f- }+ b& H$ D
Data_Order <= 3'b001;4 {% ?: `. k$ z2 E
end
' l5 }: S( n' m3 @( W8 o! A! M end
& [, J: j! ^3 E, V end
* ~9 s* ^/ e$ ]% m i/ h
* l8 ]. W: u8 V! l; A) [/*根据Data_Order的不同状态,对Data_Bus和Data_Ready更新*/
, [0 H' Y6 h; _2 b6 a" l/ calways @( Data_Order , data0, data1, data2, data3, Data_Update )
5 v" N3 y' k9 o( R! q* i2 W begin1 ] d# f/ @0 J3 t+ m7 K( A
case ( Data_Order )- \6 z& l* {1 P) B; B8 ?. q5 ^0 O
3'b001: begin
$ a; x! w( T( O4 Z Data_Bus = data0;% h1 J! n: r) l9 c2 g8 E& m
Data_Ready = 1'd1; //更新Data_Bus同时将Data_Ready拉高,通知MCU采样数据总线
, _& n( w9 J& L2 } end, q6 B0 n, L( f8 A1 w" k0 N. |
3'b010: begin
2 x0 G2 x2 Q7 C* p Data_Bus = data1;. x& C0 x r. f- D- ?
Data_Ready = 1'd1; //更新Data_Bus同时将Data_Ready拉高,通知MCU采样数据总线, h) M9 D3 c! V2 ^
end% [" R/ C% s4 F- V5 W
3'b011: begin
0 p5 Q7 f3 |) }& `( w# s0 t Data_Bus = data2;
, I$ u8 G8 R$ v) Y, S* r Data_Ready = 1'd1; //更新Data_Bus同时将Data_Ready拉高,通知MCU采样数据总线
: }5 e7 U+ N9 T7 n( \, m! p/ w end' ~# z4 k: `$ S' P/ `# c3 h
3'b100: begin
) s! |/ ]* W `: a4 N Data_Bus = data3;- O8 l/ C0 k2 {5 t9 x" W
Data_Ready = 1'd1; //更新Data_Bus同时将Data_Ready拉高,通知MCU采样数据总线( O+ p* h9 y) L2 I0 U' D' B
end
& D1 f$ z K. l2 C6 l m8 O default: begin
5 C# o3 T+ K! V6 L; J+ V* M2 p+ y Data_Bus = 8'h00;
3 y, `% _8 ~. J0 [1 }+ {3 P/ \ end
R' K+ b8 h9 T' Q2 O endcase" D; `( e% o# ]! ?# B$ l) L
if ( Data_Update == 0 ) //Data_Update被MCU拉低后,Data_Ready也被清零
. r$ V4 y+ H4 V$ ^' | begin7 }4 {% @ G! u d# y, V9 k
Data_Ready = 1'd0;
+ ~* ~1 O) e$ p( I. r+ F end) { J: a2 X2 V9 i
end! o6 |: G5 g, {9 X5 G9 w4 c
" ?1 a9 ]% y" T* o) h" Tendmodule
8 u$ g0 U; M- v2 r; s. R7 \; j" m" r' Y% r
+ M8 a( M" @; g6 y0 M. c4 Z在综合阶段出现错误:
" z+ t- N7 B2 g" P$ h: _Error (10137): Verilog HDL Procedural Assignment error at Data_Out.v(46): object "Data_Bus" on left-hand side of assignment must have a variable data type2 L* i- \3 t! {
" r1 Q& f; H6 K" |5 ~1 i# n1 G$ [. E" n7 [* P; }( D
请教高手对于这个问题应该如何处理能够解决?3 _! C# C! b n ^" R. X2 m$ B
: b9 M# ?3 t2 I5 g' R3 ]' V; p |
|