Напишите программу ОЗУ (RAM) по принципу работы FIFO на языке Verilog
module fifo#(parameter DATA_parameter ADDR_(
input [(DATA_WIDTH-1):0] data,
input [(ADDR_WIDTH-1):0] read_addr, write_addr,
input we, clk,
output reg [(DATA_WIDTH-1):0] q
);
reg [DATA_WIDTH-1:0]
ram[2**ADDR_WIDTH-1:0];
always @ (posedge clk)
begin
q <= ram[read_addr];
if (we)
ram[write_addr] <= data;
end
endmodule
Напишите программу модуля памяти с использованием цикла for
module for (clk,reset,m1,fifo);
input clk,m1,reset;
output reg [7:0] fifo;
integer i;
always @ (posedge clk)
if (reset) fifo<=0;
else begin
fifo [7] <=m1;
for (i=6; i>-1; i=i-1)
fifo [i] <=fifo [i+1];
end
endmodule
Напишите программу счетчика проходящие все свои значения в прямом и обратном направлении
Рассмотрим пример построения 8 разрядного счетчика, считающего в прямом направлении:
module count_en (en, clock, reset, out);
parameter Width = 8;
input clock, reset, en;
output [Width-1:0] out;
reg [Width-1:0] out;
always @(posedge clock or negedge reset)
if(!reset)
out = 8'b0;
else if(en)
out =out +1;
endmodule
Реализуйте программу на языке Verilog последовательную индикацию светодиодов с помощью сдвигового оператора
module example (clk, outj);
input clk;
output reg[7:0]out;
initial out=0;
always @ (posedge clk)
begin
out<=out<<1;
end
endmodule
Напишите программу кодера Хеминга для 4-х разрядного информационного кода
Пусть дано число 1111. 1 (20), 2 (21), 4 (22)- получаем 3 контрольных бита.
1111 ХХ1Х111
Вычисление контрольных бит:
1 | 2 | 3 | 4 | 5 | 6 | 7 | |
Х | Х | 1 | Х | 1 | 1 | 1 | |
1 | |||||||
2 | |||||||
4 |
Значение каждого контрольного бита зависит от значений информационного бита, но не от всех, а только от тех, которые этот контрольный бит контролирует.
|
|
Контрольный бит с номером N контролирует все послед. N бит через каждые N бит, начиная с позиции N:
« » - те биты, которые контролирует контрольный бит, номер которого справа. Вычисление каждого контрольного бита: берём каждый контрольный бит и смотрим, сколько среди контролируемых им битов единиц, получаем некоторое целое число и, если оно чётное, то ставим 0, в противном случае 1. Высчитав контрольные биты для нашего информационного слова получаем следующее : 1111111.
module Ham (clk, d,c);
input clk;
input [3:0] d;
output [6:0] c;
always@(posedge clk)
c[6] = d[3];
c[5] = d[2];
c[4] = d[1];
c[3] = d[1]^d[2]^d[3];
c[2] = d[0];
c[1] = d[0]^d[2]^d[3];
c[0] = d[0]^d[1]^d[3];
end
endmodule
Напишите программу кодера Хеминга для 8 разрядного информационного кода
Пусть дано число 11111111. 1 (20), 2 (21), 4 (22) 8(2^4)- получаем 4 контрольных бита.
1111 ХХ1Х111X1111
Значение каждого контрольного бита зависит от значений информационного бит, но не от всех, а только от тех, которые этот контрольный бит контролирует.
Контрольный бит с номером N контролирует все послед. N бит через каждые N бит, начиная с позиции N:
« » - те биты, которые контролирует контрольный бит, номер которого справа. Вычисление каждого контрольного бита: берём каждый контрольный бит и смотрим, сколько среди контролируемых им битов единиц, получаем некоторое целое число и, если оно чётное, то ставим 0, в противном случае 1.
|
|
module Ham (clk, d,c);
input clk;
input [7:0] d;
output [11:0] c;
always@(posedge clk)
c[11] = d[7];
c[10] = d[6];
c[9] = d[5];
c[8] = d[4];
c[7] = d[1]^d[2]^d[3]^d[7];
c[6] = d[3];
c[5] = d[2];
c[4] = d[1];
c[3] = d[1]^d[2]^d[3]^d[7];
c[2] = d[0];
c[1] = d[0]^d[2]^d[3]^d[5]^d[6];
c[0] = d[0]^d[1]^d[3]^d[4]^d[6];
end
endmodule
Напишите программу кодера Хеминга для 5 разрядного информационного кода
Пусть дано число 11111. 1 (20), 2 (21), 4 (22) 8(2^4)- получаем 4 контрольных бита.
1111 ХХ1Х111X1
Значение каждого контрольного бита зависит от значений информационного бит, но не от всех, а только от тех, которые этот контрольный бит контролирует.
Контрольный бит с номером N контролирует все послед. N бит через каждые N бит, начиная с позиции N:
« » - те биты, которые контролирует контрольный бит, номер которого справа. Вычисление каждого контрольного бита: берём каждый контрольный бит и смотрим, сколько среди контролируемых им битов единиц, получаем некоторое целое число и, если оно чётное, то ставим 0, в противном случае 1.
module Ham (clk, d,c);
input clk;
input [4:0] d;
output [8:0] c;
always@(posedge clk)
c[8] = d[4];
|
|
c[7] = d[1]^d[2]^d[3;
c[6] = d[3];
c[5] = d[2];
c[4] = d[1];
c[3] = d[1]^d[2]^d[3];
c[2] = d[0];
c[1] = d[0]^d[2]^d[3];
c[0] = d[0]^d[1]^d[3]^d[4];
end
endmodule
Напишите программу кодера Хеминга для 6 разрядного информационного кода
Пусть дано число 111111. 1 (20), 2 (21), 4 (22) 8(2^4)- получаем 4 контрольных бита.
1111 ХХ1Х111X11
Значение каждого контрольного бита зависит от значений информационного бит, но не от всех, а только от тех, которые этот контрольный бит контролирует.
Контрольный бит с номером N контролирует все послед. N бит через каждые N бит, начиная с позиции N:
« » - те биты, которые контролирует контрольный бит, номер которого справа. Вычисление каждого контрольного бита: берём каждый контрольный бит и смотрим, сколько среди контролируемых им битов единиц, получаем некоторое целое число и, если оно чётное, то ставим 0, в противном случае 1.
module Ham (clk, d,c);
input clk;
input [5:0] d;
output [9:0] c;
always@(posedge clk)
c[9] = d[5];
c[8] = d[4];
c[7] = d[1]^d[2]^d[3];
c[6] = d[3];
c[5] = d[2];
c[4] = d[1];
c[3] = d[1]^d[2]^d[3];
c[2] = d[0];
c[1] = d[0]^d[2]^d[3]^d[5];
c[0] = d[0]^d[1]^d[3]^d[4];
end
endmodule
Дата добавления: 2018-06-01; просмотров: 851; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!