这个程序用过很多次,但都是vhdl的,没有见到verilog的版本,所以我就把它转过来了,想了很久,今天花了半天的时间,实际上还是有很多问题都没有搞清楚。先把程序贴上来,verilog和vhdl的,便于做比较。
verilog:
Code
1 module test_sine
2 (
3 //input
4 en,
5 clk,
6 //output
7 q
8 );
9
10 input clk;
11 input en;
12 output [7:0] q;
13 reg [5:0] count;
14 // reg [7:0] q1;
15
16
17 sine u0 (
18 .clock(clk),
19 .q(q),
20 .address(count)
21 );
22
23
24 always @(posedge clk)
25 begin
26 if(!en)
27 begin
28 count <= 0;
29 end
30 else
31 begin
32 if (count == 6'b111111)
33 begin
34 count <= 0;
35 end
36 else
37 count = count+1;
38 end
39 end
40 endmodule
VHDL:
Code
1 library ieee;
2 use ieee.std_logic_unsigned.all ;
3 use ieee.std_logic_1164.all ;
4
5
6 entity sine is
7 port (clk : in std_logic ;
8 dout : out std_logic_vector (7 downto 0));
9 end ;
10
11
12
13 architecture dacc of sine is
14 component data_rom
15 port ( address : in std_logic_vector (5 downto 0);
16 inclock : in std_logic ;
17 q: out std_logic_vector (7 downto 0));
18 end component ;
19
20
21
22 signal q1 : std_logic_vector (5 downto 0);
23 begin
24 process(clk)
25 begin
26 if clk'event and clk = '1' then
27 q1 <= q1+1 ;
28 end if;
29 end process;
30
31
32 u1 : data_rom port map(address => q1, q => dout , inclock => clk);
33 end ;
34
这样一比较就很容易看出问题 ,在verilog里面就没有很明显的写出q输出的语句。我今天就是卡在了这里,而对比vhdl,
u1 : data_rom port map(address => q1, q => dout , inclock => clk);
这一句话就说的很明显。而在verilog中,
sine u0 (
.clock(clk),
.q(q),
.address(count)
);
在这里将U0例化,而在后面的count的累加中。就直接可以得到了,就是所输出的Q。
上面的这些就是我的理解。可能不是很全面。欢迎大家指正,共同讨论。