打印
[CPLD]

请教一个VERILOG程序的问题

[复制链接]
1884|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flipchip|  楼主 | 2014-7-23 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 flipchip 于 2014-7-23 15:05 编辑

各位大虾,  小弟这两天用quartus ii  编写了一个verilog程序, 不复杂的一个应用, 就用根据选择信号SEL[2:0]的不同值,把输入信号din[4:0]在clk的上升延分别锁存到dout0[4:0],...dout7[4:0]上去.
代码如下:

module WG3028(clk,sel,din, dout0,dout1,dout2,dout3,dout4,dout5,dout6,dout7 );
input clk;
input[2:0] sel;
input[4:0] din;
output[4:0] dout0,dout1,dout2,dout3,dout4,dout5,dout6,dout7;
reg[4:0] dout0,dout1,,dout2,dout3,dout4,dout5,dout6,dout7;
        always@(posedge clk)
                begin
                case(sel)
                        3'h0: dout0<=din;
                        3'h1: dout1<=din;
                        3'h2: dout2<=din;
                        3'h3: dout3<=din;
                        3'h4: dout4<=din;
                        3'h5: dout5<=din;
                        3'h6: dout6<=din;
                        3'h7: dout7<=din;                                
                endcase
                end
endmodule

本以为程序很清晰明了, 结果横竖调不出需要的结果来. 哪位热心大虾帮我看看出什么问题了?  在线等啊.
先万谢了, 今天必须把问题解决掉,否则麻烦大了.

相关帖子

沙发
ococ| | 2014-7-23 14:57 | 只看该作者
加上default情况。
另外调不出来是怎么个情况?无输出?还是输出不对?

使用特权

评论回复
板凳
flipchip|  楼主 | 2014-7-23 15:01 | 只看该作者
ococ 发表于 2014-7-23 14:57
加上default情况。
另外调不出来是怎么个情况?无输出?还是输出不对?

输出当然是有的, 只是不对头. 我需要锁存的数值,有的时候锁得住, 有的时候锁不住.
代码有没有问题啊?  另外想问一下,在我这种情况, default要写什么? 好像什么都不用了.

使用特权

评论回复
地板
ococ| | 2014-7-23 15:15 | 只看该作者
flipchip 发表于 2014-7-23 15:01
输出当然是有的, 只是不对头. 我需要锁存的数值,有的时候锁得住, 有的时候锁不住.
代码有没有问题啊?  另 ...

default情况下随便给输出个值。
怎么样的锁不住?
你数据的频率是多少?
clk频率是多少?

使用特权

评论回复
5
flipchip|  楼主 | 2014-7-23 15:38 | 只看该作者
ococ 发表于 2014-7-23 15:15
default情况下随便给输出个值。
怎么样的锁不住?
你数据的频率是多少?

clk的频率大概在10MHz左右.
比如我输入一个00111, 希望相应的引脚能够锁存这个数值, 结果输出可能就是11111,不对头.

使用特权

评论回复
6
ococ| | 2014-7-23 15:57 | 只看该作者
flipchip 发表于 2014-7-23 15:38
clk的频率大概在10MHz左右.
比如我输入一个00111, 希望相应的引脚能够锁存这个数值, 结果输出可能就是111 ...

输入00111持续很长时间也不行吗?

使用特权

评论回复
7
flipchip|  楼主 | 2014-7-23 16:05 | 只看该作者
ococ 发表于 2014-7-23 15:57
输入00111持续很长时间也不行吗?

不行. 不是clk频率高低的问题.

我用的cpld是maxii, 10MHz的频率不是问题.

使用特权

评论回复
8
flipchip|  楼主 | 2014-7-23 16:06 | 只看该作者
ococ 发表于 2014-7-23 15:57
输入00111持续很长时间也不行吗?

能确认一下程序本身是否正确吗?  如果程序确实没有任何问题,我就从硬件上查找故障.

使用特权

评论回复
9
ococ| | 2014-7-23 16:20 | 只看该作者
flipchip 发表于 2014-7-23 16:06
能确认一下程序本身是否正确吗?  如果程序确实没有任何问题,我就从硬件上查找故障. ...

程序本身应该没问题。
你可要仿真看看结果。

使用特权

评论回复
10
nethopper| | 2014-7-23 20:06 | 只看该作者
clk, sel, din,后两个的变化是否由CLK驱动,或由别的时钟驱动,CLK的上升沿到来时,SEL和DIN是否稳定?

使用特权

评论回复
11
玄德| | 2014-7-23 21:39 | 只看该作者
你这程序,在每次clk,都会修改一次输出。




使用特权

评论回复
12
habc987| | 2014-7-23 22:04 | 只看该作者
这个程序不写default也是可以的,程序没问题的

使用特权

评论回复
13
fangzimo| | 2014-7-24 08:19 | 只看该作者
本帖最后由 fangzimo 于 2014-7-24 08:24 编辑

你这3‘hx是16进制的,改成10进制的3’dx试试,程序看着没什么问题,最好仿真看一下,有没有clk输入,有没有输入的信号

使用特权

评论回复
14
liyshen| | 2014-7-24 08:45 | 只看该作者
这程序本身没问题的,是不是你的输入信号有问题?如果输入信号与时钟不同步的话,输入信号改变时输出信号前期会有亚稳态现象出现,之后就正常了;估计你说的是不对是这个问题,

使用特权

评论回复
15
NWPU_CHEN| | 2014-7-24 11:29 | 只看该作者
将你的sel【2:0】,在软件中用时钟信号驱动输入,将10M时钟信号在软件中分频后使用一个低频率信号驱动,看看结果是否正常,最有可能是你的选择信号问题

使用特权

评论回复
16
anjf163| | 2014-7-29 09:37 | 只看该作者
楼主搞定了没?

将  always @ (posedge clk ) 换成 always @ ( negedge clk ) 试一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

18

帖子

0

粉丝