打印

verilog 高手请进!

[复制链接]
2094|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lake198664|  楼主 | 2007-8-27 01:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟编写的这个程序是想让FPGA在高电平时输出一个数,而在低电平时输出另一个数,为什么在看仿真波形时只有低电平时的数呢?请各位大虾指点指点!


module ssj (
            //input
            clk1k,
            //output
            datan,
            dataa,
            datar
            );
input clk1k;
output [9:0]datan;
output [5:0]dataa;
output [2:0]datar;

wire [9:0]datan;
wire [5:0]dataa;
wire [2:0]datar;

reg [9:0]temp1;
reg [5:0]temp2;
reg [2:0]temp3;
/********************************/
always @(temp1 or temp2 or temp3)
    begin
      if(clk1k==1)
        begin
            temp1<=10'b00_0100_1110;
            temp2<=6'b11_0000;
            temp3<=3'b101;
        end
      else
        begin
            temp1<=10'b00_0100_1111;
            temp2<=6'b01_1000;
            temp3<=3'b101;
        end
    end
assign      datan=temp1;
assign        dataa=temp2;
assign        datar=temp3;
        
/**********************************/
endmodule

相关帖子

沙发
dumping| | 2007-8-27 08:55 | 只看该作者

always@*

使用特权

评论回复
板凳
arwei| | 2007-8-27 13:20 | 只看该作者

你没有搞明白触发边缘

module ssj (
            //input
            clk1k,
            //output
            datan,
            dataa,
            datar
            );
input clk1k;
output [9:0]datan;
output [5:0]dataa;
output [2:0]datar;

wire [9:0]datan;
wire [5:0]dataa;
wire [2:0]datar;

reg [9:0]temp1;
reg [5:0]temp2;
reg [2:0]temp3;
/********************************/
always @(posedge clk)
    begin
     // if(clk1k==1)
        begin
            temp1<=10'b00_0100_1110;
            temp2<=6'b11_0000;
            temp3<=3'b101;
        end
   //   else
always @(negedge clk)
        begin
            temp1<=10'b00_0100_1111;
            temp2<=6'b01_1000;
            temp3<=3'b101;
        end
   // end
assign      datan=temp1;
assign        dataa=temp2;
assign        datar=temp3;
        
/**********************************/
endmodule

使用特权

评论回复
地板
cbvwgy| | 2007-8-29 09:27 | 只看该作者

采用电平触发好一点吧

always @(clk)
   
     if(clk==1)
        begin
            temp1<=10'b00_0100_1110;
            temp2<=6'b11_0000;
            temp3<=3'b101;
        end
     else
        begin
            temp1<=10'b00_0100_1111;
            temp2<=6'b01_1000;
            temp3<=3'b101;
        end
 

使用特权

评论回复
5
yimaoqian| | 2007-8-30 21:58 | 只看该作者

always @() 括号中应包括所有条件和输入

在你所说的例子应把always@(temp1 or temp2 or temp3)改为always @(clk1k)
temp1,temp2,temp3不应该出现在括号中,相反clk1k作为触发条件应该在括号中写明

使用特权

评论回复
6
doreen105| | 2007-9-1 08:29 | 只看该作者

电平触发

always @(clk)
   
     if(clk==1)
        begin
            temp1<=10'b00_0100_1110;
            temp2<=6'b11_0000;
            temp3<=3'b101;
        end
     else
        begin
            temp1<=10'b00_0100_1111;
            temp2<=6'b01_1000;
            temp3<=3'b101;
        end

应该是这样的吧

使用特权

评论回复
7
linglinwu| | 2007-9-3 10:28 | 只看该作者

不错,不错!!!

使用特权

评论回复
8
wj2011| | 2007-9-3 11:41 | 只看该作者

cainiao

module ssj (
            //input
            clk1k,
            //output
            datan,
            dataa,
            datar
            );
input clk1k;
output [9:0]datan;
output [5:0]dataa;
output [2:0]datar;

wire [9:0]datan;
wire [5:0]dataa;
wire [2:0]datar;



assign     datan=(clklk==1)?10'b00_0100_1110:10'b00_0100_1111;
assign     dataa=(clklk==1)?6'b11_0000:6'b01_1000;
assign     datar=(clklk==1)?3'b101:3'b101;
      
   
endmodule

使用特权

评论回复
9
echo_dream| | 2007-9-7 14:25 | 只看该作者

4楼,6楼 verilog语法不对的

4楼,6楼 verilog语法基础不扎实:(
2楼,8楼是对的
2楼编译时,注意是2001语法

3楼 在同一个设计中尽量避免用不同的时钟沿,且你主观加了一个clk信号

使用特权

评论回复
10
端木| | 2007-9-16 22:28 | 只看该作者

多写一些程序,熟能生巧。



         多写一些程序,熟能生巧。

使用特权

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

本版积分规则

44

主题

113

帖子

0

粉丝