FPGA verilog中能否写出来一个保证,只有在每当0-3号按键任意一个按下,程序会运行一次!只运行一次!
我在使用DE2的板子做一个课程设计~就是当0-3任意一个,假设为"2"按下,数码管显示"2",再次按下"3"时候"2"会往前面挪,变成了"32",再次按下"1",就变成了...
我在使用DE2 的板子做一个课程设计~就是当0-3任意一个,假设为"2"按下,数码管显示"2",再次按下"3"时候"2"会往前面挪,变成了"32",再次按下"1",就变成了"132",由于8个数码管是直接接在FPGA的芯片引脚上面,没有3-8译码器相连,写的时候感觉好麻烦~~求指导~
展开
2个回答
展开全部
程序只运行一次功能,建议用T触发器实现,可实现 锁按键信号,使按键只能第一次有效。
当复位时,Q_out<=0;其他时输出结果为Q_out<=in^Q_out。
T触发器模块,代码:
module T_trigger(rst,in,Q_out);
input rst,in;
output Q_out;
reg Q_out;
always@(in or rst)
begin
if(!rst)Q_out<=0;
else Q_out<=in^Q_out;
end
endmodule
至于,数码管显示,可参考我下面的程序看看:
module shumaguan(data,rst,m1,m2);
input rst;
input[4:0]data;
output[6:0]m1,m2;
reg[6:0]m1,m2;
reg[3:0]n1,n2;
reg[7:0]db[9:0];
parameter
db[0]=7'b1000000;db[1]=7'b1111001;db[2]=7'b0100100;db[3]=7'b0110000;db[4]=7'b0011001;
db[5]=7'b0010010;db[6]=7'b0000010;db[7]=7'b1111000;db[8]=7'b0000000;db[9]=7'b0010000;
always@(data)
begin
if(!rst)
begin
m1<=db[0];
m2<=db[0];
end
else
begin
n1<=data/'d10;
n2<=data%'d10;
m1<=db[n1];
m2<=db[n2];
end
end
endmodule
当复位时,Q_out<=0;其他时输出结果为Q_out<=in^Q_out。
T触发器模块,代码:
module T_trigger(rst,in,Q_out);
input rst,in;
output Q_out;
reg Q_out;
always@(in or rst)
begin
if(!rst)Q_out<=0;
else Q_out<=in^Q_out;
end
endmodule
至于,数码管显示,可参考我下面的程序看看:
module shumaguan(data,rst,m1,m2);
input rst;
input[4:0]data;
output[6:0]m1,m2;
reg[6:0]m1,m2;
reg[3:0]n1,n2;
reg[7:0]db[9:0];
parameter
db[0]=7'b1000000;db[1]=7'b1111001;db[2]=7'b0100100;db[3]=7'b0110000;db[4]=7'b0011001;
db[5]=7'b0010010;db[6]=7'b0000010;db[7]=7'b1111000;db[8]=7'b0000000;db[9]=7'b0010000;
always@(data)
begin
if(!rst)
begin
m1<=db[0];
m2<=db[0];
end
else
begin
n1<=data/'d10;
n2<=data%'d10;
m1<=db[n1];
m2<=db[n2];
end
end
endmodule
2014-03-26
展开全部
运行1次? 用电平的跳变沿就可以了
always@(posedge clk)
begin
trig_reg <= tirg_in;
end
assign trig_pulse = (trig_reg&!trig_in);
always@(posedge clk)
begin
if(trig_pulse)
begin
................
end
end
往前挪? 移位寄存器即可
parameter clock_cycles = <number_of_clock_cycles>;
parameter data_width = <width_of_data>;
wire/reg [data_width-1:0] <data_in>, <data_out>;
reg [clock_cycles-1:0] <shift_reg> [data_width-1:0];
genvar i;
generate
for (i=0; i < data_width; i=i+1)
begin: <label>
always @(posedge <clock>)
if (<clock_enable>)
<shift_reg>[i] <= {<shift_reg>[i][clock_cycles-2:0], <data_in>[i]};
assign <data_out>[i] = <shift_reg>[i][clock_cycles-1];
end
endgenerate
你如果是输出多个数码管的寄存器的话 直接输出 <shift_reg>[i]
always@(posedge clk)
begin
trig_reg <= tirg_in;
end
assign trig_pulse = (trig_reg&!trig_in);
always@(posedge clk)
begin
if(trig_pulse)
begin
................
end
end
往前挪? 移位寄存器即可
parameter clock_cycles = <number_of_clock_cycles>;
parameter data_width = <width_of_data>;
wire/reg [data_width-1:0] <data_in>, <data_out>;
reg [clock_cycles-1:0] <shift_reg> [data_width-1:0];
genvar i;
generate
for (i=0; i < data_width; i=i+1)
begin: <label>
always @(posedge <clock>)
if (<clock_enable>)
<shift_reg>[i] <= {<shift_reg>[i][clock_cycles-2:0], <data_in>[i]};
assign <data_out>[i] = <shift_reg>[i][clock_cycles-1];
end
endgenerate
你如果是输出多个数码管的寄存器的话 直接输出 <shift_reg>[i]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |