Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 9615|回復: 6
打印 上一主題 下一主題

[問題求助] VHDL转verilog问题

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-12-29 14:16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
手里面有个VHDL写的FIFO,现在想转换成VERILOG的; f4 q, v- D& \7 ?, L9 b
原代码如下
  1. 9 s9 V# l7 q, z8 |! T
  2. $ m! ^8 E, S& N8 r* b& E
  3. CNT: process(CLR, WR_PTR, RD_PTR)
    * _( W9 K2 U1 \+ u" Q
  4.   variable change : integer;  1 `' w8 g0 e" B8 D6 i
  5. begin  
    2 x% j: ]4 y: p9 V
  6.   if CLR = '1' then  c, c- ?. W* a1 [$ Z* }
  7.    count <= 0;
    $ F& _" b$ f# H+ L8 f1 i$ t
  8.    change := 0;8 P0 }9 A: j9 x# ~
  9.   else
    6 Y6 b; Z' ?, d# J6 ?
  10.    change := 0;
    8 V7 c6 R( w9 d3 y  N. u- R2 N
  11.    if WR_PTR'event then2 U% P8 \& Z4 F' t+ L
  12.     change := 1;! z3 b1 V# \( C. t/ n/ ?% z
  13.    end if;
    / f# H# b9 P8 d. v5 T
  14.    if RD_PTR'event then
    / Y$ P1 f% F0 J& c1 e
  15.     change := change - 1;9 w; l$ `) D9 V# J- v7 C
  16.    end if;. Z+ n) f$ e$ z4 K& v
  17.    count <= count + change;
    ; h  D1 P4 I" i; U
  18.   end if;+ ^& ~0 H) J) o/ l
  19. end process;
複製代碼
不知道改为Verilog该怎么写红色部分。
  g8 [# m2 d; B% D4 C( t2 f/ u, N/ t我想是用always@( WR_PTR)
5 i) P" Q& k( k  y8 x但是process(CLR, WR_PTR, RD_PTR)这一句已经用了always了,没办法,刚接触verilog,请大家帮帮忙
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-1-5 12:41:03 | 只看該作者
這個fifo程式有問題喔,沒有clock訊號,很奇怪.
3#
 樓主| 發表於 2009-1-6 16:31:33 | 只看該作者
这个FIFO程式有CLK的,我这里只是一部分代码,没有将所有代码贴出来,只是希望大家告诉我该怎么写if WR_PTR'event then
4#
發表於 2009-1-7 11:42:34 | 只看該作者
1. VHDL clock 語法好像不太對,應該是 if WR_PTR'event and WR_PRT='1' then3 Z: F( ^* K- Z+ y/ k1 {/ X
2. count 沒有clock!你可能需要把全部貼出來,看是不是漏掉了?( \) `' {! y# _9 u8 W" ^& k9 S7 i
3. 一個process有兩個clock,一般不會這樣寫的。
5#
 樓主| 發表於 2009-1-10 22:11:05 | 只看該作者
  1. ------------------------------------------------------------------------------------
    + G' M# d+ \* Z8 V
  2. library IEEE;; L5 `1 k% W8 e- A! q/ p; X1 v# t
  3. use IEEE.std_logic_1164.all;. L. D& F' r) G) N
  4. entity fifo is
    ! \* N# \0 t  O* R. t' v8 j/ U
  5.         generic (
    - j% [5 i1 Q# ^9 B. e0 Q! |3 J# d
  6.                 depth : positive := 16
    * Y+ O* |7 t; j1 `' f* O# V1 ^6 C
  7.                 );          {3 w  X7 y& ~% U& _% P* x6 K
  8.         port(
    & O6 p$ q) N1 e- o2 J9 ]5 O" i
  9.                 CLR   : in  std_logic;
    . G. p2 m& v5 C& J" S+ `
  10.                 WCLK  : in  std_logic;$ }1 [4 D2 Q( d& Y
  11.                 WE    : in  std_logic;
    ' C9 Y7 K) t) M
  12.                 RCLK  : in  std_logic;0 p8 ]. |5 c1 x0 C& M% l/ M
  13.                 RE    : in  std_logic;) i* W  a3 V9 b& X
  14.                 DATA  : in  std_logic_vector(7 downto 0);; m( D; m# W0 m7 ^' P2 U
  15.                 EMPTY : out std_logic;
    . L6 o5 `% F* t. M7 v# Y7 ^
  16.                 FULL  : out std_logic;/ O) y1 E3 |2 x
  17.                 Q     : out std_logic_vector(7 downto 0)
    ( C) o" Y5 A/ q* x* ?( L# u7 {- L
  18.         );
    5 I/ W% P' G6 {5 i7 P& c
  19. end entity;
    - G; p9 L6 q+ ^: h
  20. library IEEE;
    $ v$ [# g  e8 N2 u+ o, a
  21. use IEEE.std_logic_unsigned.all;9 o$ @# u! i( N! ~4 J& [6 q2 ?2 i
  22. architecture behavior of fifo is5 I* P. w( z' f+ e4 R/ \$ W% i
  23.         constant fmax : positive := depth-1;        : J  c* J' l1 G% L8 X2 l9 d) V+ z/ j
  24.         type fifo_array_type is array (fmax downto 0) of std_logic_vector(7 downto 0);
    $ Z# T5 g( ], Y' v
  25.         signal fifo_array : fifo_array_type;
    9 ^# \8 f* p4 P9 p2 i
  26.         signal WR_PTR : INTEGER range 0 to fmax;
    / k* c( c/ Y. [, Y8 S
  27.         signal RD_PTR : INTEGER range 0 to fmax;
    & C5 z4 [6 H8 U7 c) u& w
  28.         signal count  : INTEGER range 0 to depth;
    4 Z9 L6 X0 P' n5 @
  29. begin5 V/ J  \5 y: K+ ~
  30.         CNT: process(CLR, WR_PTR, RD_PTR)9 ^& f' m0 x9 l- U1 X* h
  31.                 variable change : integer;               
    % \; @: h  O7 S7 X7 T
  32.         begin  7 d+ }4 T( m' U  C2 M& q0 L$ p
  33.                 if CLR = '1' then& l9 ^1 Z) ?. C
  34.                         count <= 0;* Q/ f( W) _8 B2 Q5 B
  35.                         change := 0;
    5 w; e3 M5 x  R2 O% d
  36.                 else( b% x4 X+ P6 M4 y: V7 ^7 n8 A
  37.                         change := 0;
      ^. J- ^' r0 E
  38.                         if WR_PTR'event then/ e+ m9 }* V6 f1 i$ H  e/ Z' `2 z
  39.                                 change := 1;
    ) h% N1 c; V6 @$ K* o8 k8 J" Q
  40.                         end if;8 b9 Q* o0 e9 H0 ^
  41.                         if RD_PTR'event then
    3 y4 p6 H" [5 ?, ^( G* O2 h( F8 N
  42.                                 change := change - 1;
    0 b8 ]/ m/ X2 F  o
  43.                         end if;0 r4 U* |: n- O4 I5 _( j0 M  w# Z
  44.                         count <= count + change;
    8 o' Y0 X5 a. A2 x; p
  45.                 end if;
    5 L/ I8 h) y' Q. m
  46.         end process;        0 {5 K, D  [' e' S. E/ ]
  47.         STATUS: process(count)# e: Z' C& i6 b3 m4 A; U* b
  48.         begin  3 c2 c" T4 X, R) v5 [
  49.                 if count=0 then
    . y* z: T1 m* l( {1 h: j3 H/ I
  50.                         FULL   <= '0';+ v$ x4 M/ O" I6 y+ ^
  51.                         EMPTY  <= '1';
    $ F, O" H! _( ^8 U) f0 @) i9 l' P
  52.                 elsif count=depth  then
    4 p" \, s. [# |% X9 @: V9 m
  53.                         FULL   <= '1';
    0 w1 Z1 H- z; w/ q) w
  54.                         EMPTY  <= '0';
    7 B% @: l% ?7 \+ z, w  S
  55.                 else       
    & y+ {) P4 n* b2 i9 y
  56.                         FULL   <= '0'; # O: T' C( i# A3 ~
  57.                         EMPTY  <= '0';
    ( I6 f6 b1 e* }9 N
  58.                 end if;                       
    0 m! ^4 B$ l; |& H/ \4 v% q
  59.         end process;       
複製代碼
6#
 樓主| 發表於 2009-1-10 22:13:00 | 只看該作者
  1.         FWRITE: process (CLR, WCLK)
    5 Y4 z: N6 E* ^& V
  2.         begin
    9 u6 S. X+ x) C2 }! X3 K
  3.                 if CLR = '1' then
    / G* o/ M0 k5 a/ k5 W7 J
  4.                         for INDEX in fmax downto 0 loop
    # [: Z) s; W' H: g: h2 s( Z
  5.                                 fifo_array(INDEX) <= (others => '0');
    1 R; D" F9 p' Z: F5 \
  6.                         end loop;: ~) |! E& ^/ V- I$ C/ L( c( P  T
  7.                         WR_PTR <= 0;
    7 ~$ w6 f. v* G# \4 w
  8.                 elsif rising_edge(WCLK) then
    ) g+ o5 U0 S+ o/ B/ l& `
  9.                         if WE = '1' and count<depth then
    - @1 G  B4 W4 s( S* X0 R7 K
  10.                                 fifo_array(WR_PTR) <= DATA;" M1 j' e- t2 D$ s9 ]  G) Q. d3 N
  11.                                 -- move pointer
    ! _/ ]4 K' k8 c6 Y8 v" O8 e
  12.                                 if WR_PTR=fmax then
    2 P* p# ^9 j9 u9 q8 g% F
  13.                                         WR_PTR <= 0; * i% r+ e6 T& X. S! e! u* X
  14.                                 else WR_PTR <= WR_PTR + 1;
    7 r! A2 I: R! E9 u
  15.                                 end if;, h2 @4 s" p2 S( m9 b; X
  16.                         end if;( F# ^# F4 x3 k" d3 N1 |, B  n% Q
  17.                 end if;
    ; Q3 w* v5 ^& g, u4 N! l
  18.         end process;; o# T% i) C2 ?, Q+ l2 }+ k
  19.         FREAD: process (CLR, RCLK)
    3 t1 c  r9 F& J% w- ~: V) X+ t
  20.         begin! s& E% Q. g  I3 d' l: i
  21.                 if CLR = '1' then2 E; o+ b# s4 I0 ?! T: E# M+ [
  22.                         RD_PTR <= 0;
    - E5 e8 U  P" v$ `5 L* Q+ p
  23.                 elsif falling_edge(RCLK) then
    9 [/ @5 D) F, U' ^  J. L' c
  24.                         if RE = '1' and count>0 then$ `. X# A# D, g, a- B$ |) ]; i
  25.                                 Q <= fifo_array(RD_PTR);
    $ u" G$ u6 T4 H+ I2 g; x/ |% w
  26.                                 -- move pointer 1 K+ S2 N% v+ A+ H1 _) y, O
  27.                                 if RD_PTR=fmax then ( d+ W6 [0 V7 _2 i  X
  28.                                         RD_PTR <= 0;
    + X* o4 X* B# K; r: i; m# A
  29.                                 else RD_PTR <= RD_PTR + 1;
    ) S* s% U/ M3 f8 Q
  30.                                 end if;8 o/ p6 n1 b! }# r
  31.                         end if;
    # ]# Z  Y* `3 T
  32.                 end if;2 }, K2 U: Q2 \8 t' d6 @7 r
  33.         end process;
    2 B2 E3 G( c3 `9 X$ ]2 n
  34. end architecture;
複製代碼
7#
發表於 2009-7-4 00:42:31 | 只看該作者
印象中有个工具可以转vhdl 为 verilog,可以看看,或许有用
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-5-31 03:20 PM , Processed in 0.111014 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表